js同步任务和异步任务的执行顺序

先来道今日头条面试题开开胃面试

async function async1() {
    console.log('async1 start');
    await async2();                
    console.log('async1 end');
}
async function async2() {
    console.log('async2');
}
console.log('script start');
setTimeout(function() {
    console.log('setTimeout');
}, 0)
async1();
new Promise(function(resolve) {
    console.log('promise1');
    resolve();
}).then(function() {
    console.log('promise2');
});
console.log('script end');
/**
 * scripr start
 * async1 start
 * async2
 * promise1
 * scroptend
 * async1end
 * promise2
 * setimeout
 */

执行结果是否是和你想的有些不一样?下面是我查阅资料后总结的同步任务和异步任务的执行顺序promise

一、无论是同步仍是异步,js都会按顺序执行,只是不等待异步的执行结果而已(并非遇到异步的就绕过不执行,别蒙了)异步

二、同步的任务没有优先级之分,异步执行有优先级,先执行微任务(microtask队列),再执行宏任务(macrotask队列),同级别按顺序执行async

  微任务: `process.nextTick` ,`promise` ,`MutationObserver`函数

  宏任务:`script` , `setTimeout` ,`setInterval` ,`setImmediate` ,`I/O` ,`UI rendering`spa

三、await表示让出线程,继续执行后面的函数(执行当前函数后面的函数,不是当前函数里面的)线程

相关文章
相关标签/搜索