下面我有两个函数。其中一个返回一个 promise ,我希望在每个循环中首先等待它完成,然后移动一个。正如您将在下面看到的结果不是所需的/同步的。我不应该使用async.forEachof
function test(num, callback)
{
console.log("inside function: "+num)
return new Promise((resolve, reject) => {
my.promise(num).then(() => {
console.log("done: "+num)
resolve(callback);
}).catch(e => console.error(e));
}).catch(console.error);
}
function start_function()
{
//stuff
async.forEachOf(arr, function (itm, i, callback){
console.log(i)
test(i, callback).catch(e => console.error(e));
}, function (err) {
console.log("ALL DONE")
});
}
结果:
0
inside function 0
1
inside function 1
2
inside function 2
done: 0
done: 2 //wrong should always be 1, finished before the previous promise.
done: 1 //wrong
ALL DONE
我不想使用 PromiseAll 不是因为我不想,而是因为我需要每个 Promise 等待前一个的结果,然后开始下一个。因此,将它们全部收集起来,然后等待它们按照我需要做的任何顺序完成是没有意义的。
最佳答案
如果我没记错的话,你到底想做什么,但你应该避免在 Promise 函数中传递回调并解决它。您可以使用此代码实现相同的目的,并从测试函数中删除回调。
function start_function()
{
//stuff
arr.forEach(async function (itm, i, array){
console.log(i)
try {
await test(i);
}
catch(err){
console.log(err);
}
});
}
这是测试函数的样子,
function test(num)
{
console.log("inside function: "+num)
return new Promise((resolve, reject) => {
my.promise(num).then(() => {
console.log("done: "+num)
resolve();
}).catch(e => {
console.error(e)
reject(e);
});
});
}
关于node.js - 继续循环后等待每个 promise 完成,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47247203/