在aws lambda中执行返回语句之前,我如何等待forEach循环完成?
module.exports.shipments = async (event) => {
const axios = require("axios");
let data = JSON.parse(event.body);
let url = data.apiURL + "/api/1.1/wf/bulkshipments/initialize";
let patchURL = data.apiURL + "/api/1.1/obj/company/" + data.companyID;
data.shipments.forEach((item, index, array) => {
axios.post(url,{
batchID: data.batchID,
companyID: data.companyID,
shipment: item})
});
return {
statusCode: 200,
body: JSON.stringify({
message: 'Created successfully!',
totalShipments: data.shipments.length,
}, null, 2),
};
};
发布于 2019-05-19 19:54:58
您已经在使用异步,所以使用map返回一个promises列表,并使用Promise.all()
等待它们
module.exports.shipments = async (event) => {
const axios = require("axios");
let data = JSON.parse(event.body);
let url = data.apiURL + "/api/1.1/wf/bulkshipments/initialize";
let patchURL = data.apiURL + "/api/1.1/obj/company/" + data.companyID;
let promises = data.shipments.map(item =>
axios.post(url, {
batchID: data.batchID,
companyID: data.companyID,
shipment: item})
})
);
await Promise.all(promises);
return {
statusCode: 200,
body: JSON.stringify({
message: 'Created successfully!',
totalShipments: data.shipments.length,
}, null, 2),
};
};
要让每个调用都等待,而不是同时触发所有post请求,请使用for...of loop
module.exports.shipments = async (event) => {
const axios = require("axios");
let data = JSON.parse(event.body);
let url = data.apiURL + "/api/1.1/wf/bulkshipments/initialize";
let patchURL = data.apiURL + "/api/1.1/obj/company/" + data.companyID;
for (let item of data.shipments) {
await axios.post(url, {
batchID: data.batchID,
companyID: data.companyID,
shipment: item})
});
}
await Promise.all(promises);
return {
statusCode: 200,
body: JSON.stringify({
message: 'Created successfully!',
totalShipments: data.shipments.length,
}, null, 2),
};
};
https://stackoverflow.com/questions/56207504
复制相似问题