async function async1() {
console.log("async1 start");
await async2();
console.log("async1 end");
}
async function async2() {
console.log("async2");
}
console.log("script start");
setTimeout(() => {
console.log("setTimeout");
}, 0);
async1();
new Promise((resolve) => {
console.log("promise1");
resolve();
}).then(() => {
console.log("promise2");
});
console.log("script end");
结果:script start
async1 start
async2
promise1
script end
async1 end 注意这个的执行时机
promise2
setTimeout
注意点:1、setTimeout是宏任务,then方法是微任务
2、函数执行时,内部遇到异步操作,await异步操作后面的也会进入微任务。
3、同步代码执行完毕后,执行完微任务,再执行宏任务。
4、扩展:执行微任务的时候,内部可能还有微任务和宏任务,宏任务弹出排队,微任务必须先于宏任务执行完毕。