Aza*_*aev 7 http amazon-web-services node.js aws-lambda axios
我的 AWS Lambda 函数有以下处理程序。我不想或不需要等待Promise.all解决或拒绝。因为,我对它的结果不感兴趣。我的目的是发送这些请求并完成。问题是,如果我删除关键字await(用箭头指向),请求就不会启动。但是,如果我输入关键字await,Lambda 函数需要运行并收费 3-5 秒,这对我来说并不划算。
你能解释一下我做错了什么吗?为什么没有关键字就不会发送请求await?
module.exports.handler = async (event) => {
try {
const urls = [/*some API urls*/];
--> await Promise.all(urls.map((url) => {
return axios.post(url, { email })
.catch((error) => {
console.log(error);
});
}));
return {
statusCode: 200,
body: JSON.stringify({ message: 'OK' }),
headers: {
'Content-Type': 'application/json',
},
};
} catch (error) {
return {
statusCode: 500,
body: JSON.stringify({ message: 'INTERNAL_ERROR' }),
headers: {
'Content-Type': 'application/json',
}
}
}
};
Run Code Online (Sandbox Code Playgroud)
der*_*her 14
正如文档中所述
如果您的代码执行异步任务,请返回一个承诺以确保它完成运行。当您解决或拒绝承诺时,Lambda 会将响应或错误发送给调用者。
如果您不返回承诺,则无法保证您的异步任务将运行结束。通过创建处理程序,async您确实返回了一个承诺。但是,如果没有await处理Promise.all程序的此承诺,则会立即解决,因此 lambda(以及所有未完成的异步任务)的执行将停止。
这似乎很合乎逻辑。否则,每个人都会在长时间运行的异步任务中编写繁重的计算。lambda 函数中唯一的同步调用将调用该异步任务,并且 lambda 函数将在几毫秒后返回(并收费)。
如果您只想为 100 毫秒付费,请让您的任务足够快。如果你的任务需要 4 秒,你就必须为 4 秒付费。
| 归档时间: |
|
| 查看次数: |
4775 次 |
| 最近记录: |