Ожидание цикла forEach в лямбда-функции aws - PullRequest
1 голос
/ 19 мая 2019

Как мне дождаться завершения цикла 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),
    };
};

1 Ответ

1 голос
/ 19 мая 2019

Вы уже используете асинхронный режим, поэтому используйте карту для возврата списка обещаний и ожидайте их всех с помощью 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 ... 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),
    };
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...