Análise de caso de execução síncrona e assíncrona

Análise de caso de execução síncrona e assíncrona

O JavaScript é de thread único. Ele primeiro processa a sincronização e, em seguida, processa as tarefas na fila de tarefas. A fila de tarefas é dividida em fila de tarefas de macro e fila de micro tarefas. A prioridade da fila de micro tarefas é maior do que a da fila de tarefas macro

console.log('1');   //第一位=》直接输出1

setTimeout(() => {
    
    //定时器,异步函数,先存放宏任务队列
    console.log('2');第五位=》宏任务队列开始,输出2
    process.nextTick(() => {
    
    
        console.log('3');第七位=》直接输出3
    })
    new Promise((resolve) => {
    
    
        console.log('4');第六位=》同步输出4
        resolve();
    }).then(() => {
    
    
        console.log('5')第八位=》直接输出5
    })
})
process.nextTick(() => {
    
    //异步,存放微任务队列
    console.log('6');第三位,先处理微任务队列,打印6
})
new Promise((resolve) => {
    
    //Promise为同步函数,直接打印7
    console.log('7');//第二位=》直接输出7
    resolve();
}).then(() => {
    
    //promise.then为异步,存放微任务队列
    console.log('8');第四位=》直接输出1,微任务队列按顺序,打印8
})

setTimeout(() => {
    
    //定时器,异步函数,先存放宏任务队列
    console.log('9');//第九位=》直接输出9
    process.nextTick(() => {
    
    
        console.log('10');//第十二位=》直接输出10
    })
    new Promise((resolve) => {
    
    
        console.log('11');//第十位=》直接输出11
        resolve();
        console.log('12');//第十一位=》直接输出12
    }).then(() => {
    
    
        console.log('13')//第十三位=》直接输出13
    })
})
控制台输出结果:1 7 6 8 2 4 3 5 9 11 12 10 13
事件循环,第一次循环输出1 7 6 8,第二次循环输出2 4 3 5,第三次循环输出9 11 12 10 13

Acho que você gosta

Origin blog.csdn.net/Wonder_BBJ/article/details/108263345
Recomendado
Clasificación