javascript - AWS Lambda - 只有在第二次测试触发后才能得到答案
问题描述
我正在用 TypeScript 开发一个 AWS Lambda,它使用 Axios 从 API 获取数据,这些数据将被过滤并放入 dynamoDb。
代码如下所示:
export {};
const axios = require("axios");
const AWS = require('aws-sdk');
exports.handler = async (event: any) => {
const shuttleDB = new AWS.DynamoDB.DocumentClient();
const startDate = "2021-08-16";
const endDate = "2021-08-16";
const startTime = "16:00:00";
const endTime = "17:00:00";
const response = await axios.post('URL', {
data:{
"von": startDate+"T"+startTime,
"bis": endDate+"T"+endTime
}}, {
headers: {
'x-rs-api-key': KEY
}
}
);
const params = response.data.data;
const putPromise = params.map(async(elem: object) => {
delete elem.feat1;
delete elem.feat2;
delete elem.feat3;
delete elem.feat4;
delete elem.feat5;
const paramsDynamoDB = {
TableName: String(process.env.TABLE_NAME),
Item: elem
}
shuttleDB.put(paramsDynamoDB).promise();
});
await Promise.all(putPromise);
};
这一切都很好。如果第一次按下测试按钮,一切似乎都很好并且正在工作。例如,我console.log
在开发过程中收到了所有 s 但数据没有放入 db。
第二次尝试是相同的输出,但数据已成功放入 Db。
关于这个问题的任何想法?我该如何解决这个问题并在第一次尝试后将数据放入 Db?
提前致谢!
解决方案
您需要从 db 调用中返回承诺 -
return shuttleDB.put(paramsDynamoDB).promise();
此外,Promise.all
如果任何调用失败(与 Promise.allSettled 相比),将提前完成,因此可能值得注销任何可能发生的错误。
更好的是,看看 transactWrite - https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#transactWrite-property以确保全部或不写入
推荐阅读
- kubernetes - 是否可以在不添加 Kubernetes 集群的情况下在 Gitlab 中运行测试?
- c# - 在 .NET Core 2 中创建 HttpClient 的最佳实践
- jmeter - 如何修复jemeter运行记录中的“不愿意透露存在”错误
- angular - Angular Material Stepper 的验证
- android - 在不破坏现有小部件的情况下重命名 AppWidgetProvider
- prolog - Prolog-仅使用“+”将代数表达式拆分为单独的原子和数字列表
- c# - 在选择时使用 ComboBox.DataSource 项
- c# - 如果我有一个重复次数的数字,我如何重复一个字符来组成一个字符串?
- awk - 根据 awk 中的字段值隔离行
- sql - 如何从 SQL 数据库中的多个父类别中检索多个子类别