我有一个 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
!