我假设我缺乏一些关于 promise 的基础知识。我在 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);
};
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);
}
};
您的 test
函数没有等待您在 forEach
循环中创建的 promise ,因此 lambda 在一切完成之前完成。
关于javascript - AWS Lambda 和 promise : Callbacks not being called,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56085000/