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.logs,但是数据没有放入db中。.

第二次尝试是相同的输出,但数据成功地放入Db。

关于这个问题有什么想法吗?我怎么能解决这个问题,并有数据放入数据库后第一次尝试?提前感谢!

你需要从db调用返回承诺-

return shuttleDB.put(paramsDynamoDB).promise();

同样,如果任何调用失败,Promise.all将提前完成(与promise . allsettle相比),因此可能值得注销可能发生的任何错误。

更好的是,查看transactWrite- https://docs.aws.amazon.com/AWSJavaScriptSDK/latest/AWS/DynamoDB/DocumentClient.html#transactWrite-property以确保全部或没有写入

最新更新