zoukankan      html  css  js  c++  java
  • Event Loop

    文章

    console.log('1');
    
    setTimeout(function() {
        console.log('2');
        process.nextTick(function() {
            console.log('3');
        })
        new Promise(function(resolve) {
            console.log('4');
            resolve();
        }).then(function() {
            console.log('5')
        })
    })
    process.nextTick(function() {
        console.log('6');
    })
    new Promise(function(resolve) {
        console.log('7');
        resolve();
    }).then(function() {
        console.log('8')
    })
    
    setTimeout(function() {
        console.log('9');
        process.nextTick(function() {
            console.log('10');
        })
        new Promise(function(resolve) {
            console.log('11');
            resolve();
        }).then(function() {
            console.log('12')
        })
    })
    
    
    • 整体代码作为一个宏任务进入,开始第一个循环
    • 执行同步 //1
    • stime1 放入宏任务队列任务
    • process.nextTick ,process1进入微任务队列,
    • new promise 立即执行 //7
    • then1放入微任务队列
    • stime2 放入入宏任务队列
    • 完成第一个宏任务(整体代码script)
    • 执行微任务process1 then1 //6 8
    • 结束第一次循环,开始第二次循环,执行宏任务stime1,//2
    • process2放入微队列中
    • new promise //4
    • 添加微任务then2
    • 执行微任务process2 then2 结束第二次循环 // 3 5
    • 执行宏任务stime2 // 9
    • 新增微任务process3
    • new promise //11
    • 添加微任务then3
    • 执行process3 then3 结束第三次循环 // 10 12
      所以输出结果1 7 6 8 2 4 3 5 9 11 10 12
  • 相关阅读:
    lua中for循环
    调试经验
    vim中如何替换
    ~=
    size函数
    ubuntu截屏
    linux下报错处理经验
    error: 'Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2)'
    《JavaScript》——DOM
    iOS_截屏并裁剪
  • 原文地址:https://www.cnblogs.com/angle-xiu/p/14095685.html
Copyright © 2011-2022 走看看