微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Promise的宏任务与微任务

先看例子:

new Promise(function(resolve, reject) {
    console.log(1);
    setTimeout(function() {
        console.log("First");
        resolve();
    }, 1000);
    console.log(2);

}
).then(function() {
    console.log(3);

    return new Promise(function(resolve, reject) {
        setTimeout(function() {
            console.log("Second");
            resolve();
        }, 4000);
    }
    );
}).then(function() {
    console.log(4);

    setTimeout(function() {
        console.log("Third");
    }, 3000);
    console.log(5);

});
console.log(0)
// 1
// 2
// 0
// undifined
// First
// 3
// Second
// 4
// 5
// Third
  • macro-task(宏任务):包括整体代码script,setTimeout,setInterval
  • micro-task(微任务):Promise,process.nextTic

执行机制1:

JS的执行机制是:

首先,判断JS是同步还是异步,同步进入主线程,异步进入Event table

其次,异步任务在Event table中注册函数,当满足特定的条件,被推入Event queue

最后,同步任务进入主线程后一直执行,直到主线程空闲后,才会去Event queue中查看是否有可执行的异步任务,如果有就推入主线程中执行。

循环以上三步执行,这就是Event loop。

执行机制2:

 

 

执行一个宏任务,过程中如果遇到微任务,就将其放到微任务的【事件队列】里

当前宏任务执行完成后,会查看微任务的【事件队列】,并将里面全部的微任务依次执行完

这样就不难分析出上面例子的代码执行顺序。

点击查看原文

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐