[英]Using nested async await function calls
我有一个非常简单的代码,我正在尝试调试。 我有一个async
function:
async function updateResult(event){
let result = db.fetchResult(event.ProcessId);
return result;
}
我从另一个简单的async
function 调用它:
exports.processEvent = async (event) => {
try {
let promises = [];
const controls = await db.fetchControls(event.EventCode);
if (controls) {
promises = controls.map((control) => {
console.log(control);
control.map(x => this.updateResult(event));
});
}
return Promise.allSettled(promises);
}
catch (err) {
console.error(err);
}
};
问题是在exports.processEvent
中, db.fetchControls(event.EventCode)
的内容被执行到完成(一些逻辑和一个 db getItem 调用)。
但是通过this.updateResult(x.Id, x.Version, event)
调用db.fetchResult(event.ProcessId)
) 并没有完成执行fetchResult任务(一些其他逻辑 db GET 调用)。
我觉得fetchResult
过早返回。 我究竟做错了什么?
.map()
不是承诺感知的。 它不会等待回调中的任何承诺完成。 所以,在这段代码中:
control.map(x => this.updateResult(x.Id, x.Version, event));
它只是遍历整个数组,忽略返回的所有承诺,因此没有等待这些承诺。
您可以通过将这些承诺返回到更高级别的.map()
来解决此问题,然后您正在等待Promise.all()
:
promises = controls.map((control) => {
console.log(control);
return Promise.all(control.map(x => this.updateResult(x.Id, x.Version, event)));
});
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.