[英]nodejs - async.each function with async operation on each iteration
我有一个关于 async.each 行为的问题。 考虑代码:
const examples = [1,2];
const asyncTask = (index) => {
return new Promise(resolve => {
setTimeout(() => {
console.log(`Inside setTimeout-${index}`);
resolve(true);
}, 1500)
});
}
function testingAsyncEach(callback){
async.each(examples, (example, innerCallback) => {
asyncTask(example).then(isDone => {
console.log(`isDone: ${isDone}`);
innerCallback(null);
});
}, err => {
console.log('done testingAsyncEach');
return callback()
})
}
testingAsyncEach(() => {console.log('final callback testingAsyncEach');})
使用 nodejs 中的“async”模块的简单代码,使用数组 [1,2] 并在数组中的每个项目上执行函数“asyncTask”,该函数返回一个新的承诺,该承诺在 1.5 秒超时后得到解决。
在这种情况下,程序的输出是:
Inside setTimeout-1
isDone: true
Inside setTimeout-2
isDone: true
done testingAsyncEach
final callback testingAsyncEach
但是当我将“testingAsyncEach”函数更改为使用“await”语法时:
function testingAsyncEach(callback){
async.each(examples, async (example, innerCallback) => {
const isDone = await asyncTask(example);
console.log(`isDone: ${isDone}`);
innerCallback(null);
}, err => {
console.log('done testingAsyncEach');
return callback()
})
}
async.each 不会等待“asyncTask”结束。 输出:
Inside setTimeout-1
isDone: true
done testingAsyncEach
final callback testingAsyncEach
Inside setTimeout-2
isDone: true
你能帮我理解为什么使用“await”而不是“then”来改变行为吗? 我怎样才能仍然使用“await”语法并获得正确的输出? 谢谢!
根据 async 模块的文档,如果您传递async
函数,它不会将innerCallback
传递给您的函数。 我相信您的innerCallback(null)
调用因此出错,使async.each
返回。 (虽然第二个例子已经“启动”了,所以之后仍然会发生)
检查err
是否设置为错误,如果是,请记录。
如果这是问题,删除innerCallback
参数和调用应该可以解决它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.