【发布时间】:2021-09-26 15:31:30
【问题描述】:
我对 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”会改变行为吗?我怎样才能仍然使用“等待”语法并获得正确的输出? 谢谢!
【问题讨论】:
标签: javascript node.js async-await promise