预期以下代码应该打印顺序会是 1 2 3 4 5 但实际执行时却是 1 2 5 3 4
(async () => {
console.log("1");
let n = await new Promise((reslove, reject) => {
console.log("2");
setTimeout(() => {
reslove("3");
}, 2000);
});
console.log(n);
console.log("4");
})();
console.log("5");
预计 await new Promise 应该是会等到 reslove("3"); 执行后再顺序执行,怎麽就直接跳过了呢? 若是想要 1 2 3 4 5 的执行该怎麽调整?
附注
.babelrc
{
"presets": [
[
"env",
{
"targets": {
"node": "current"
}
}
]
],
"plugins": ["transform-object-rest-spread"],
"ignore": ["node_modules"]
}
setTimeout
是一个 macrotask,所以会先输出1 2 5,到下一个event loop,setTimeout
才会resolve
3出去,然后才会 log 4