setTimeout(()=>{
console.log('timeout');
});
Promise.resolve().then(
()=>{
console.log(1);
}
).then(
()=>{
console.log(2);
}
).then(
()=>{
console.log(3);
}
);
Promise.resolve().then(
()=>{
console.log('a');
}
).then(
()=>{
console.log('b');
}
).then(
()=>{
console.log('c');
}
);
這個例子的輸出為“1”,“a”,“2”,“b”,“3”,“c”,“timeout”。
因為任務的執(zhí)行順序是宏任務,微任務交替執(zhí)行的,所以作為下一次宏任務的“timeout”最后執(zhí)行。
微任務與宏任務的運行機制不同,運行微任務時碰到的微任務會直接加到本次微任務隊列的尾部,直到該隊列沒有可執(zhí)行的微任務。
微任務的隊列大致變化:
1, a
a, 2
2, b
b, 3
3, c
c
所以用嚴格執(zhí)行順序的Promise要寫在一條鏈上