Результаты обработки Lamdba, вызывающего другую Lambda - PullRequest
2 голосов
/ 20 июня 2019

У меня есть лямбда-функция AWS A, которая вызывает другую лямбда-функцию B Для обсуждения я хочу вызвать ее синхронно - дождаться результатов и обработать их.Я хочу сделать что-то подобное в Lambda A:

let results = lambda.invoke(LambdaB);
// Do some stuff with results

Проблема в том, что когда я использую APK SDK для вызова Lambda B, я передаю функцию, которая обрабатывает результаты этого вызова.Функция обработки вызывает и обрабатывает результаты, но я замечаю, что // Делать некоторые другие вещи со строкой результатов выполняется до завершения этой функции обработки, поэтому результаты еще не доступны.Я все еще немного новичок в способе работы NodeJS, так какова парадигма, обеспечивающая получение желаемых результатов, прежде чем я перейду к большей обработке с Lambda A?Вот что у меня в двух словах:

// Lambda A code
let payLoad = undefined;
let functionName = "LambdaB";
let params = {
  FunctionName: functionName,
  InvocationType: "RequestResponse",
  LogType: "Tail",
  Payload: '{name: "Fred"}'
};

lambda.invoke(params, function(err,data) {
  if (err) {
    // process error
  } else {
    payLoad = JSON.parse(data.Payload);
    // payLoad is set properly here.
  }
});

console.log("Do stuff with results');
console.log("PAYLOAD=" + payLoad);  
// payLoad is undefined here
// How can I ensure it is set by the time I get here
// or do I need to use a different paradigm?

1 Ответ

1 голос
/ 20 июня 2019

Вам нужно будет использовать async / await .

Итак, ваш код будет выглядеть так:

exports.handler = async () => {
  // Lambda A code
  let functionName = "LambdaB";
  let result = undefined;
  let payload = undefined;
  let params = {
    FunctionName: functionName,
    InvocationType: "RequestResponse",
    LogType: "Tail",
    Payload: '{name: "Fred"}'
  };

  try {
    result = await lambda.invoke(params).promise();
    payload = JSON.parse(result.Payload);
  } catch (err) {
    console.log(err);
  }

  console.log("Do stuff with results');
  console.log(payload);
  return;
}

Осторожно: лямбда-обработчик должен быть async функцией, чтобы использовать async/await в нем!

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