Node.js:异步函数似乎不等待 for 循环中 Promise 的解析
Node.js: Async function seems to not wait for resolve of Promise within for loop
For 循环在第一个 await new Promise
执行后结束,没有任何代码。如果我理解正确,每次迭代应该暂停 2 秒,然后 Promise
被解析,console.log
输出指定的字符串,然后迭代结束。我应该如何重写代码以使其按预期工作?
'use strict';
(async function () {
for (let i = 0; i < 5; i++) {
await new Promise(resolve => { setTimeout(() => { resolve }, 2000) });
console.log('end of loop');
}
})();
在您的代码段中,setTimeout
将调用匿名函数,该函数将 resolve
计算为表达式,其中 return 是一个函数。您需要显式调用 resolve()
或将其作为 function
.
类型的第一个参数传递给 setTimeout
改变
setTimeout(() => { resolve }, 2000)
到
setTimeout(resolve, 2000)
或
setTimeout(() => { resolve() }, 2000)
可以这样写,
'use strict';
var wait2Sec = function (time = 2000) {
return new Promise(function (resolve, reject) {
setTimeout(() => {
resolve(); // <--- remamber to call the resolve function
}, time)
});
}
(async function () {
for (let i = 0; i < 5; i++) {
await wait2Sec();
console.log('end of loop');
}
})();
您需要在 setInterval 回调中调用 resolve 函数。
await new Promise(resolve => { setTimeout(() => { resolve() }, 2000) });
For 循环在第一个 await new Promise
执行后结束,没有任何代码。如果我理解正确,每次迭代应该暂停 2 秒,然后 Promise
被解析,console.log
输出指定的字符串,然后迭代结束。我应该如何重写代码以使其按预期工作?
'use strict';
(async function () {
for (let i = 0; i < 5; i++) {
await new Promise(resolve => { setTimeout(() => { resolve }, 2000) });
console.log('end of loop');
}
})();
在您的代码段中,setTimeout
将调用匿名函数,该函数将 resolve
计算为表达式,其中 return 是一个函数。您需要显式调用 resolve()
或将其作为 function
.
setTimeout
改变
setTimeout(() => { resolve }, 2000)
到
setTimeout(resolve, 2000)
或
setTimeout(() => { resolve() }, 2000)
可以这样写,
'use strict';
var wait2Sec = function (time = 2000) {
return new Promise(function (resolve, reject) {
setTimeout(() => {
resolve(); // <--- remamber to call the resolve function
}, time)
});
}
(async function () {
for (let i = 0; i < 5; i++) {
await wait2Sec();
console.log('end of loop');
}
})();
您需要在 setInterval 回调中调用 resolve 函数。
await new Promise(resolve => { setTimeout(() => { resolve() }, 2000) });