Получить значение обратно из AWS lambda.invoke синхронно - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь вызвать лямбда-функцию AWS из другой лямбда-функции, используя метод invoke с типом вызова RequestResponse, и получить значение, возвращаемое из лямбды.

Когда я вызываю lambda.invoke с использованием await обратный вызов по-прежнему вызывается асинхронно.Я хотел бы, чтобы значения, которые мне нужны, были доступны в следующей строке кода, отсюда и синхронное требование.Однако в приведенном ниже коде в журналах я вижу запись «Данные из обратного вызова» перед записью «Данные в обратном вызове» со значением 0 из обратного вызова и правильным значением в обратном вызове.

Если бы кто-нибудь мог помочь мне понять, как это сделать, я был бы очень признателен!Вот код:

async readData() {

        let myData = [];

        const params = {
            FunctionName: "MyFunctionName",
            InvocationType: "RequestResponse",
        };

        await lambda.invoke(params, (error, data) => {
            if (error) {
                console.log("Got a lambda invoke error");
                console.error(error);
            } else {
                let response = JSON.parse(data.Payload);
                myData = JSON.parse(response.body);

                console.log("Data in Callback: " + myData.length);
            }
        });

        console.log("Data out of Callback: " + myData.length);
}

Спасибо,

Крис

Ответы [ 2 ]

0 голосов
/ 03 октября 2018

AWS-SDK уже обещан.Если вы хотите использовать 8.10 runtime и try && catch block, тогда просто используйте следующий фрагмент:

    async readData() 
    {
        const params = 
        {
            FunctionName: "MyFunctionName",
            InvocationType: "RequestResponse",
        };

        try
        {
            const lambdaInvokeResp = await lambda.invoke(params).promise();

            // if succeed
            // handle your response here
            // example
            const lambdaRespParsed = JSON.parse(lambdaInvokeResp.Payload);
            const myData = JSON.parse(lambdaRespParsed.body);

            return myData;
        }
        catch (ex) // if failed
        {
            console.error(ex);
        }
    }
0 голосов
/ 03 октября 2018

Вскоре после публикации я, наконец, наткнулся на ответ на этот вопрос, найденный в этом сообщении:

Вызвать лямбда-функцию amazon из приложения узла

В частности, третий ответ вниз, не принятое решение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...