美文网首页Node程序员的技术日常
nextTick、setImmediate、promise.re

nextTick、setImmediate、promise.re

作者: 我就是L | 来源:发表于2017-03-06 10:15 被阅读231次
  • 执行队列(同步) 任务队列(异步事件)

  • 每当异步任务完成后会在任务队列中添加一个关联事件,待执行队列任务执行完成,将对应的异步任务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());
}

相关文章

网友评论

    本文标题:nextTick、setImmediate、promise.re

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