Javascript 正在等待lambda初始化

Javascript 正在等待lambda初始化,javascript,aws-lambda,Javascript,Aws Lambda,我想在lambda事件处理方法之外进行一些初始化,主要是加载环境变量,但其中一些是用KMS加密的,因此我需要解密它们,但我必须等待承诺解决。Javascript不是我的主要语言,所以我不确定是否有一种合理的方法(如果有的话)来实现这一点 我当前的实现如下所示 const controller = parseEnv(process.env).then((parsedEnv) => { return new InstallController(parsedEnv); }); expo

我想在lambda事件处理方法之外进行一些初始化,主要是加载环境变量,但其中一些是用KMS加密的,因此我需要解密它们,但我必须等待
承诺
解决。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后立即解决。