宏任务和微任务:
宏任务: 主线程上的任务都是宏任务
微任务: Promise 的then
宏任务和微任务的分类
宏任务:
setTimeout
setInterval
js主代码
setImmediate(Node)
requestAnimationFrame(浏览器)
微任务:
process.nextTick (nodejs的方法)
Promise的then方法
async与promise结合使用
async 函数调用的位置 很关键 : 该函数调用是在 promise() 实例化之前 (按照正常的分析逻辑),
在promise实例化之后(因为await 是等待,等待await后的函数执行完后,会去执行一次微任务, 然后在此回到之前的任务执行顺序中去执行 await 后的代码)
async function async1() {
console.log('async1 start');//4
await async2();
console.log('async1 end')//7
}
async function async2() {
console.log('async2')//5
}
console.log('script start'); //1
setTimeout(function () {
console.log('setTimeout')//最后执行 8
}, 0);
new Promise(function (resolve) {
console.log('promise1');//2
resolve()
}).then(function () {
console.log('promise2')//微任务 6
});
console.log('script end')//3
async1();
<!-- 结果:
script start
promise1
script end
async1 start
async2
promise2
async1 end
setTimeout
-->
分析:
async1()
是在promise之后执行,也是在最后执行,可以把async1、async2放在最后做判断,首先判断同步异步,