将dotenv转换为AWS getSecretValue,如何导出异步和同步混合的模块?
Converting dotenv to AWS getSecretValue, how to export a module that is a mix of async and sync?
提前致歉,对 Node 还很陌生;这是我当前的同步代码:
const path = require('path');
const dotEnvPath = path.resolve('./.env');
require('dotenv').config({
path: dotEnvPath
});
module.exports = {
env: process.env,
};
但是当我的环境不是开发时,我也想从 AWS secrets manager 获取相同的信息,使用
client.getSecretValue({SecretId: name})
这是异步/回调/等等 - 问题是模块导出在 AWS 调用 returns 之前就完成了,导致导出没有任何内容(当不是开发时)。我不能 return Promise,因为必须修改其余代码才能解决它们 - 是否有 clean 方法可以以这种方式导出模块使用来自异步方法的数据?
截至 Javascript 实现的当前状态,您无法直接导出异步检索的值,因为导出是在任何异步操作完成之前同步发生的。
通常的解决方法是导出调用者可以调用的函数,并且该函数 returns 是使用异步值解析的承诺。然后,您可以选择直接导出同步部分并让调用者调用导出的函数来获取异步部分,或者您可以将同步部分和异步部分都放在函数 returns 的承诺的已解析值中.当一个操作一部分是同步的,一部分是异步的时,整个值只能异步获取。
I can't return a Promise because the rest of the code would have to be modified to resolve them - is there a clean way that I can export a module in this fashion using data from an async method?
你别无选择。从 Javascript 的当前状态开始,您无法同步导出异步值。正在进行一项标准工作,以提供一种异步导出机制,其中导出过程实际上可能会阻止加载过程,直到检索到结果,但目前尚不可用。
因此,如果您想将异步值合并到导出中,如果调用方想要异步检索的值,则他们将不得不更改导入方式。别无选择。
提前致歉,对 Node 还很陌生;这是我当前的同步代码:
const path = require('path');
const dotEnvPath = path.resolve('./.env');
require('dotenv').config({
path: dotEnvPath
});
module.exports = {
env: process.env,
};
但是当我的环境不是开发时,我也想从 AWS secrets manager 获取相同的信息,使用
client.getSecretValue({SecretId: name})
这是异步/回调/等等 - 问题是模块导出在 AWS 调用 returns 之前就完成了,导致导出没有任何内容(当不是开发时)。我不能 return Promise,因为必须修改其余代码才能解决它们 - 是否有 clean 方法可以以这种方式导出模块使用来自异步方法的数据?
截至 Javascript 实现的当前状态,您无法直接导出异步检索的值,因为导出是在任何异步操作完成之前同步发生的。
通常的解决方法是导出调用者可以调用的函数,并且该函数 returns 是使用异步值解析的承诺。然后,您可以选择直接导出同步部分并让调用者调用导出的函数来获取异步部分,或者您可以将同步部分和异步部分都放在函数 returns 的承诺的已解析值中.当一个操作一部分是同步的,一部分是异步的时,整个值只能异步获取。
I can't return a Promise because the rest of the code would have to be modified to resolve them - is there a clean way that I can export a module in this fashion using data from an async method?
你别无选择。从 Javascript 的当前状态开始,您无法同步导出异步值。正在进行一项标准工作,以提供一种异步导出机制,其中导出过程实际上可能会阻止加载过程,直到检索到结果,但目前尚不可用。
因此,如果您想将异步值合并到导出中,如果调用方想要异步检索的值,则他们将不得不更改导入方式。别无选择。