Promise.all(promiseList) 不工作但 Promise.all(promiseList[0]) 是
Promise.all(promiseList) is not working but Promise.all(promiseList[0]) is
我正在使用 aws lambda 获取项目列表并将项目异步推送到 table 中。这里 promise.all(promiseList) 没有在 table 中添加数据,但是 promise.all(promiseList[0]) 确保我的第一个元素被推送到 table 中。我怎样才能让它等待所有人?
我的代码-
let promiseList = [];
// await Promise.all(
promiseList.push(
event.Records.map(async record => {
console.log(record.dynamodb.Keys.ServiceOrderId.S);
console.log('Inside initiate payment');
const paymentObject = {
paymentId: record.dynamodb.Keys.ServiceOrderId.S,
totalAmount: "1200"
};
console.log(paymentObject);
const dynamoDBParams = {
TableName : TABLE_NAME,
Item : paymentObject
};
return await DynamoDBClient.put(dynamoDBParams).promise();
}
)
);
return await Promise.all(promiseList[0]);
我可以看到几个变化
- 我们不需要
await
每一个put都完成,效率会很低,我们希望一次继续执行。
DynamoDBClient.put(dynamoDBParams).promise()
正在返回一个承诺,它可以被推入一个数组,而不是推入整个循环
这是完整的 Lambda 的样子:
const AWS = require("aws-sdk");
AWS.config.update({ region: "us-east-1" });
let docClient = new AWS.DynamoDB.DocumentClient();
exports.handler = async function(event) {
const table = 'test'
var promiseArray = [];
event.Records.map(record => {
console.log('record', record);
const promise = docClient.put({
TableName: table,
Item: {
pk: record.pk,
title: record.title,
},
}).promise();
promiseArray.push(promise)
})
return Promise.all(promiseArray);
}
我正在使用 aws lambda 获取项目列表并将项目异步推送到 table 中。这里 promise.all(promiseList) 没有在 table 中添加数据,但是 promise.all(promiseList[0]) 确保我的第一个元素被推送到 table 中。我怎样才能让它等待所有人? 我的代码-
let promiseList = [];
// await Promise.all(
promiseList.push(
event.Records.map(async record => {
console.log(record.dynamodb.Keys.ServiceOrderId.S);
console.log('Inside initiate payment');
const paymentObject = {
paymentId: record.dynamodb.Keys.ServiceOrderId.S,
totalAmount: "1200"
};
console.log(paymentObject);
const dynamoDBParams = {
TableName : TABLE_NAME,
Item : paymentObject
};
return await DynamoDBClient.put(dynamoDBParams).promise();
}
)
);
return await Promise.all(promiseList[0]);
我可以看到几个变化
- 我们不需要
await
每一个put都完成,效率会很低,我们希望一次继续执行。 DynamoDBClient.put(dynamoDBParams).promise()
正在返回一个承诺,它可以被推入一个数组,而不是推入整个循环
这是完整的 Lambda 的样子:
const AWS = require("aws-sdk");
AWS.config.update({ region: "us-east-1" });
let docClient = new AWS.DynamoDB.DocumentClient();
exports.handler = async function(event) {
const table = 'test'
var promiseArray = [];
event.Records.map(record => {
console.log('record', record);
const promise = docClient.put({
TableName: table,
Item: {
pk: record.pk,
title: record.title,
},
}).promise();
promiseArray.push(promise)
})
return Promise.all(promiseArray);
}