jlr*_*lin 1 javascript node.js promise async-await aws-lambda
我假设我在承诺方面缺乏一些基本知识。我有一个在AWS Lambda内的流程,该流程下载三个文件,然后生成通过电子邮件发送的输出。
module.exports.test = async (event) => {
var p = download1();
var c = download2();
var h = download3();
await Promise.all([p, c, h]).then(() => {
... bunch of logic manipulating the data
customers.forEach(i => {
buildFile().then(data => {
sendEmail(data).then(response => {
console.log('Email sent successfully');
});
});
});
}, errHandler);
};
Run Code Online (Sandbox Code Playgroud)
buildFile和sendEmail函数都返回Promise,但是我从没收到“电子邮件已成功发送”消息。它运行代码,但实际上在Lambda完成之前从未返回(至少我认为这是正在发生的事情)。
我的理解是Promise将完成回调,但是现在我想我需要做的事情与在原始Promise.all()中进行下载的方式类似。那是正确的方向吗?
该过程应获取文件,然后遍历客户以创建每个文件并通过SES发送。
您正在寻找
module.exports.test = async (event) => {
var p = download1();
var c = download2();
var h = download3();
try {
await Promise.all([p, c, h]);
// ... bunch of logic manipulating the data
var promises = customers.map(async (i) => {
var data = await buildFile();
var response = await sendEmail(data);
console.log('Email sent successfully');
});
await Promise.all(promises);
} catch(e) {
errHandler(e);
}
};
Run Code Online (Sandbox Code Playgroud)
您的test函数没有等待您在forEach循环中创建的promise ,因此lambda在完成所有操作之前就完成了。