【发布时间】:2019-08-09 05:06:27
【问题描述】:
我想通过以下代码在 lambda 处理程序之外调用一个异步函数:
var client;
(async () => {
var result = await initSecrets("MyWebApi");
var secret = JSON.parse(result.Payload);
client= new MyWebApiClient(secret.API_KEY, secret.API_SECRET);
});
async function initSecrets(secretName) {
var input = {
"secretName" : secretName
};
var result = await lambda.invoke({
FunctionName: 'getSecrets',
InvocationType: "RequestResponse",
Payload: JSON.stringify(input)
}).promise();
return result;
}
exports.handler = async function (event, context) {
var myReq = await client('Request');
console.log(myReq);
};
“客户端”未初始化。如果在处理程序中执行相同的代码,则可以完美运行。 initSecrets 包含 getSecrets() 的 lambda 调用,它调用 AWS SecretsManager 有谁知道如何在处理程序之外正确调用异步函数以进行初始化?
非常感谢您的支持。
【问题讨论】:
-
@Dennis Bauszus 在下面有正确的解决方案。您可以在 lambda 处理程序之外的部分中获得您的承诺,然后将其分配给一个新的局部变量并在其上“等待”。这样它只会被初始化一次,等待会确保它已经完成。
标签: asynchronous async-await aws-lambda initialization aws-secrets-manager