Daily-Question
Daily-Question copied to clipboard
【Q389】以下输出顺序多少 (setTimeout 与 promise 顺序)
setTimeout(() => console.log(0))
new Promise((resolve) => {
console.log(1)
resolve(2)
console.log(3)
}).then(o => console.log(o))
new Promise(resolve => {
console.log(4)
resolve(5)
}).then(o => console.log(o)).then(() => console.log(6))
1 => 3 => 4 => 2 => 5 => 6 => 0
以下输出顺序多少 (setTimeout 与 promise 顺序)
setTimeout(() => console.log(0));
new Promise((resolve) => {
console.log(1);
resolve(2);
console.log(3);
}).then((o) => console.log(o))
.then(() => console.log(7));
new Promise((resolve) => {
console.log(4);
resolve(5);
})
.then((o) => console.log(o))
.then(() => console.log(6));
-
第一次循环
- 宏任务队列:
JavaScript
代码。打印console.log(1);
、console.log(3)
、console.log(4);
- 微任务队列:[
then((o) => console.log(o)) | [resolve(2)]
、then((o) => console.log(o)) | [resolve(5)]
] - 延时队列:
setTimeout(() => console.log(0));
- 执行微任务队列:
then((o) => console.log(o)) | [resolve(2)]
、then((o) => console.log(o)) | [resolve(5)]
、其中then((o) => console.log(o)) | [resolve(5)]
执行完成后又向当前微任务队列中加入一个任务then(() => console.log(6));
。 - 执行微任务队列:[
then((o) => console.log(o)) | [resolve(2)]
、then((o) => console.log(o)) | [resolve(5)]
]。其中 这两个任务又分别陆续返回2个微任务、因此当前微任务队列的执行顺序是 1、[then((o) => console.log(o)) | [resolve(2)]
、then((o) => console.log(o)) | [resolve(5)]
]。2、[then(() => console.log(7))
、then(() => console.log(6))
]。
第二次循环:检查延时队列
setTimeout(() => console.log(0));
打印console.log(0)
- 宏任务队列: