Как я могу дождаться завершения цикла forEach, прежде чем оператор return будет выполнен в aws lambda?
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),
};
};
Вы уже используете асинхронность, поэтому используйте карту, чтобы вернуть список промисов, и дождитесь их всех с помощью 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),
};
};
Чтобы каждый вызов ждал, вместо того, чтобы запускать все запросы на публикацию одновременно, используйте for... цикла:
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),
};
};
Как я могу добавить задержку между каждым звонком?