nextTick、setImmediate、promise.resolve().then()、setTimeout

  • 执行队列(同步) 任务队列(异步事件)

  • 每当异步任务完成后会在任务队列中添加一个关联事件,待执行队列任务执行完成,将对应的异步任务callback移入执行队列中执行

  • 循环重复tick

  • process.nextTick 本轮事件循环,执行队列尾部1

  • setTimeout(0) 本轮事件循环,任务队列尾部3

  • setImmediate 本轮事件循环,任务队列尾部(与setTimeout执行顺序不确定)3

  • then 本轮事件循环,任务队列头部2

setImmediate(function () {
    console.log(7)
});
setTimeout(function () {
    console.log(1)
}, 0);
process.nextTick(function () {
    console.log(6)
    process.nextTick(function () {
        console.log(8)
    })
});
new Promise(function executor(resolve) {
    console.log(2);
    for (var i = 0; i < 10000; i++) {
        i == 9999 && resolve();
    }
    console.log(3);
}).then(function () {
    console.log(4);
});
console.log(5);
//执行队列(同步) 2 3 5   6 8
//任务队列(异步) 4 (1,7)
function timeout() {//一直重复tick
    setTimeout(() => test(), 0);
}

function tick() {// 霸占执行队列,事件循环无法进入
    process.nextTick(()=>p());
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容