题目
下面代码的执行结果:
function wait() {
return new Promise(resolve =>
setTimeout(resolve, 10 * 1000)
)
}
async function main() {
console.time();
const x = wait();
const y = wait();
const z = wait();
await x;
await y;
await z;
console.timeEnd();
}
main();
解析:
new Promise相当于同步任务,后面的then才是微任务。
const x = wait();
const y = wait();
const z = wait();
这三个都是同步任务,同时返回一个Promise对象,对象里面都有一个setTimeout。所以几乎同时执行setTimeout。再执行各自的await任务,所以时间差不多10s。
变形:
function wait() {
return new Promise(resolve =>
setTimeout(resolve, 10 * 1000)
)
}
async function main() {
console.time();
await wait();
await wait();
await wait();
console.timeEnd();
}
main();
不同于上题了,await后面必须执行完,才能执行下一条语句,所以时间差不多为30s.