美文网首页
JavaScript 异步

JavaScript 异步

作者: jeneen1129 | 来源:发表于2020-06-18 11:25 被阅读0次

异步机制详解

才清晰知道浏览器里面的JS引擎运行来跑js,
js中事件循环包含栈(用来执行同步任务),
消息队列(用来加入耗时的事件回调、定时任务、ajax回调等异步任务的回调函数)
从上文中学习:

const p1 = new Promise(function (resolve, reject) {
   console.log(new Date)
   console.log('p1');
   setTimeout(() => resolve('after 3 s from p1'), 0)
   console.log('还会执行我吗?')
})

const p2 = new Promise(function (resolve, reject) {
   console.log(new Date)
   console.log('p2');
   setTimeout(() => resolve(p1), 0)
   console.log('还会执行我吗?')
})

p2.then(result => {
   console.log(new Date)
   console.log('success');
   console.log(result)
}).catch(error => {
   console.log(new Date)
   console.log('failure');
   console.log(error)
})

// a
setTimeout(function () {
   for (var i = 0; i < 100000000; i++) { }
   console.log('timer a');
}, 0)

// b
for (var j = 0; j < 5; j++) {
   console.log(j);
}

// c
setTimeout(function () {
   console.log('timer b');
}, 0)

// d
function waitFiveSeconds() {
   var now = (new Date()).getTime();
   while (((new Date()).getTime() - now) < 5000) { }
   console.log('finished waiting');
}

// e
document.addEventListener('click', function () {
   console.log('click');
})

// f
console.log('click begin');

// g
waitFiveSeconds();



/**
* 执行步骤:
* 栈(同步): 插入 b, f, d
* 消息队列中: e(点击事件触发时回调函数加入队列)
*         a, c 回调依次立即加入队列,但是要等到同步和队列中事件清空,才会执行,所以其设定的事件可能没有用,
*              并且,如果遇到DOM操作可能还不会立即执行
*
* ...加入Promise
* promise创建时立即执行,其中的 异步任务(耗时操作、鼠标点击、定时任务、网络请求等)
* 会根据回调函数的触发而推入消息队列中,
*(这点自己确实不清楚) .then是在回调函数中执行 
*/
未触发点击事件的执行结果
从阮一峰的异步机制讲解中
阮一峰的 event loop讲解

Promise-js中的同步和异步

本来是感觉Promise不知道具体的执行语句顺序,就搜了一下,但是具体操作还是有点没有搞懂,
好像是Promise将异步操作都变成了同步的了,
promise学习

相关文章

  • JavaScript异步编程好文摘要

    JavaScript之异步编程简述JavaScript异步编程

  • AJAX

    AJAX:Asynchronous javascript And XML 异步的javascript和xml 异步...

  • ES6 之 Promise

    Promise是JavaScript异步编程中的重要概念,异步抽象处理对象,是目前比较流行Javascript异步...

  • ajax:load()加载静态资源

    AJAX = 异步 JavaScript 和 XML (Asynchronous JavaScript ...

  • Ajax

    Asynchronous JavaScript and XML (异步的 JavaScript and XML )...

  • 动态Web编程

    一、AJAX异步提交 异步提交AJAX = Asynchronous JavaScript and XML(异步的...

  • part1整理

    函数式编程:JavaScript函数式编程指南 异步编程:异步编程 Promise源码 JavaScript基础知...

  • jquery与ajax

    AJAX? AJAX = 异步 JavaScript 和 XML(Asynchronous JavaScript ...

  • JavaScript基础 Ajax

    Ajax Asynchronous Javascript And XML(异步 JavaScript 和 XML)...

  • 对 Ajax 的一次复盘

    Ajax = Asynchronous JavaScript and XML 即为异步的 JavaScript ...

网友评论

      本文标题:JavaScript 异步

      本文链接:https://www.haomeiwen.com/subject/fhwyxktx.html