如何在导出变量之前等待promise?

问题描述 投票:0回答:2

如何仅在承诺完成后导出值?假设我在

secrets.js
文件中有这样的内容:

var secretsData;

(async function () {
  secretsData = await getSecret(); // makes some async API call to AWS Secrets Manager
})();

module.exports = secretsData;

如何等待承诺完成后再导出

secretsData

我想避免向导入

secrets.js
文件的代码的所有其他区域引入异步处理(这可能会冒泡到其父函数等)。在我看来,如果我可以导入并使用秘密并假设它已经填充,那么处理起来就会简单得多:

var secretsData = require("../secrets");
... do something with secretsData.url ...
... do something with secretsData.db.password ...

感觉这是一个简单的问题,但我似乎找不到任何解决方案。我读过的大多数文章似乎都只是建议唯一的解决方案是让所有依赖秘密的东西也变得异步,但这感觉对于如此简单的事情来说是一个如此复杂的解决方案(特别是当有很多地方取决于秘密)。

实现依赖于完成承诺的秘密(或某种形式的配置)的最简单/惯用/最干净的方法是什么?

javascript async-await promise
2个回答
0
投票

尝试:(不确定这是否有效)

var secretsData = await getSecret();
module.exports = secretsData;

但我为此写了类似的东西:

let settings = JSON.parse(fs.readFileSync("src/config/localdata.json"));
export { settings };

这个想法是,无论你在等待什么,都应该阻塞,直到结果被分配给你想要导出的变量。


-2
投票

尝试

module.exports = await secretsData;

您可以参考这里了解更多信息: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/await

© www.soinside.com 2019 - 2024. All rights reserved.