我有以下代码:
function asyncLoop() {
return new Promise(function(res, rej) {
for(let i=0;i<=400000000;i++) {
if(i===400000000) {console.log("done"); res();}
}
});
}
asyncLoop().then(()=>{console.log("then")});
console.log("out");
我得到以下输出:
done
out
then
根据我对 Promises 的理解,asyncLoop 应该异步运行,并且输出应该如下:
out
done
then
我错过了什么?
最佳答案
您的循环位于您传递给 new Promise
的回调内。该函数称为“执行器”:
function executor(resolve, reject)
执行器由new Promise
同步调用。执行器的作用是设置任何异步事件,以便最终调用 resolve
或 reject
。
请参阅 MDN:Promise constructor parameters
This function is invoked immediately with the resolving functions as its two arguments.
The constructor will not return until the executor has completed
关于javascript - 包含 for 循环的基于 Promise 的函数不异步运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44201640/