当前位置: 代码迷 >> JavaScript >> 如何延迟“新函数”在编译时缓存参数,等到它被使用
  详细解决方案

如何延迟“新函数”在编译时缓存参数,等到它被使用

热度:7   发布时间:2023-06-07 16:37:49.0

我正在尝试启动一个。 但是,当我尝试首先加载我从 AWS Secret Manager 接收到的环境变量时,它似乎加载了以下代码/缓存连接的以下参数,这会导致错误,因为一切都是“未定义”。

const client = {
        user: process.env.user,
        password: process.env.pass,
        database: process.env.db,
        port: process.env.port,
        host: process.env.host
  };


const redshiftClient = new redshift(client, {rawConnection: false}) 

加载机密后,我使用同一脚本中的函数调用 redshiftClient:

retrieveData() {
        return redshiftClient.query(`SELECT * 
            FROM cit.rules`, 
        {raw: true}, function(err, data){
            if(err) console.error(err);
            else {
                return data;
            }
        });
    }

我不确定为什么在请求完成之前它会被立即调用/缓存。 这不应该只发生在我第一次调用 redshiftClient 之后吗? 我该怎么做才能确保我的环境变量已从 secretmanager 加载并且我仍然可以访问 redshiftClient.query?

我想到了。 由于它正在创建一个新对象,因此我可以通过执行以下操作在调用它之前编辑密码值:

redshiftClient.config.password = process.env.pass;

我通过使用 console.log 显示 redshiftClient 对象的内容,然后查看密码的存储位置来得到这个答案。

这会在调用我的查询之前更新值。 我确信有更好的方法可以做到这一点,但这是我能够找到的解决方法。

  相关解决方案