我有一个调用另一个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?
答案 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
!