Javascript 正在等待lambda初始化
我想在lambda事件处理方法之外进行一些初始化,主要是加载环境变量,但其中一些是用KMS加密的,因此我需要解密它们,但我必须等待Javascript 正在等待lambda初始化,javascript,aws-lambda,Javascript,Aws Lambda,我想在lambda事件处理方法之外进行一些初始化,主要是加载环境变量,但其中一些是用KMS加密的,因此我需要解密它们,但我必须等待承诺解决。Javascript不是我的主要语言,所以我不确定是否有一种合理的方法(如果有的话)来实现这一点 我当前的实现如下所示 const controller = parseEnv(process.env).then((parsedEnv) => { return new InstallController(parsedEnv); }); expo
承诺
解决。Javascript不是我的主要语言,所以我不确定是否有一种合理的方法(如果有的话)来实现这一点
我当前的实现如下所示
const controller = parseEnv(process.env).then((parsedEnv) => {
return new InstallController(parsedEnv);
});
exports.handler = async (event, context, callback) => {
const install = await controller;
return install.handle(event, context, callback);
};
理想情况下,我想移动
const install=wait controller代码>在导出.handler
函数之外。我可以不使用硬编码睡眠来执行此操作吗?Lambda是为serverless
体系结构设计的,这意味着如果没有任何调用,Lambda函数可能会进入“睡眠”状态
然后,如果您连续调用lambda函数,则处理程序之外的变量已被缓存
我将向您展示我的道路:
const initInstall = async () => {
const parsedEnv = await parseEnv(process.env);
return new InstallController(parsedEnv);
};
let install = null;
exports.handler = async (event, context, callback) => {
if (!install) {
install = await initInstall();
} else {
// Hit from "cache"
}
return install.handle(event, context, callback);
};
我将const controller
重构为initInstall
函数,它是一个异步函数
并创建一个名为install
的变量来“缓存”InstallController
对象
在handler
函数中,只需检查install
是否存在,如果不存在,则将initInstall
的结果分配给install
,这只是一种更详细的方式来完成我已经在做的事情,对吗?在我的示例中,const-controller
将是一个承诺,在冷启动后将始终存在,wait-controller
将在第一次调用lambda后立即解决。