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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在编译时从缓存参数中延迟“新函数”,等到它被使用相关的知识,希望对你有一定的参考价值。

我想开始一个red-shift client。但是,当我尝试首先加载我从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对象的内容然后查看密码的存储位置来得到这个答案。

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

以上是关于如何在编译时从缓存参数中延迟“新函数”,等到它被使用的主要内容,如果未能解决你的问题,请参考以下文章

在编译时从变体中获取类型

应用程序正在生成我的延迟加载模块的一部分,前缀为 default ~ .. 甚至在它被调用之前

如何在编译时从 string_view 中删除子字符串?

Python:根据新的函数参数调用缓存的函数结果

如何在运行时从 JVM 中提取类文件

如何在编译时从表达式设置变量值?