关于Event Loop,查阅多篇博客,或多或少总有些出入,在此写下本身关于Event Loop的理解
许多地方把Promise标记为微任务,可是这容易让人误觉得new Promise的时候这个过程是个微任务。实际上是Promsie.then、Promise.catch是微任务,new Promise的时候当作普通的生成对象来看待,因此在此我标记为Promise.then
执行本轮个宏任务html
那么问题来了,多个宏任务队列时,下一趟的宏任务该取哪一个呢?上述方法中,我是将宏任务都当作一个队列的
/* example1 */ setTimeout(function () { console.log(1); },7); new Promise(function (resolve) { console.log(2); for (var i = 0; i < 10000; i++) { i == 99 && resolve(); } }).then(function () { console.log(3); setTimeout(() => { console.log(4); }); }) console.log(5); // 2 3 5 (4 1) 后两个数字的顺序与两定时器的delayTime有关,谁先知足触发条件就先输出谁 (html5 标准中,规定delayTime >= 4ms) /* example2 */ setTimeout(_ => console.log(4)); new Promise(resolve => { resolve() console.log(1) }).then(_ => { console.log(3) Promise.resolve().then(_ => { console.log('before timeout') }).then(_ => { Promise.resolve().then(_ => { console.log('also before timeout') }) }) }) console.log(2); // 这个也不难,分析分析就出结果了
综上 菜鸡二问前端
这些问题都需在不断的深刻了解中才能知道答案
以上就是阅读多篇博客以后我的对Event Loop的一些看法,或有不正确之处,望批评指正