处理 Lambda 调用另一个 Lambda 的结果



我有一个 AWS Lambda 函数 A,它调用另一个 Lambda 函数 B为了讨论起见,我想同步调用它 - 等待结果并处理它们。我想在 Lambda A 中做这样的事情:

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

问题是,当我使用开发工具包 APi 调用 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?

你需要使用 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;
}

注意:lambda处理程序必须是一个async函数才能在其中使用async/await

最新更新