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

时间:2019-06-20 11:54:04

标签: amazon-web-services aws-lambda

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

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

问题是,当我使用SDK 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?

1 个答案:

答案 0 :(得分:1)

您将需要使用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