【发布时间】:2019-05-22 18:14:45
【问题描述】:
我是 JS/nodejs 的新手,所以如果我不能提出中肯的问题,请原谅我。
所以基本上,如果我有两个异步函数,
async function init() {...}
async function main() {...}
如何确保在 init() 完成异步请求后调用 main()?
具体来说,我想利用模块 https://www.npmjs.com/package/hot-import
而在其页面上,有一个示例代码:
async function main() {
const MODULE_CODE_42 = 'module.exports = () => 42'
const MODULE_CODE_17 = 'module.exports.default = () => 17'
const MODULE_FILE = path.join(__dirname, 't.js')
fs.writeFileSync(MODULE_FILE, MODULE_CODE_42)
const hotMod = await hotImport(MODULE_FILE)
. . .
示例代码按原样工作,但当我将其放入事件回调函数时,事情开始出现问题——它适用于第一个事件触发器,但不适用于第二个。
我认为问题不是常量hotMod,而是导致问题的async 函数中的await hotImport。因此,我试图将hotMod 定义为全局变量,并在async init() 函数之前 调用main() 中执行hotMod = await hotImport(MODULE_FILE)。但到目前为止我还不能,因为我对 JS/nodejs 很陌生。
请帮忙。谢谢。
【问题讨论】:
-
不,我认为创建一个全局 promise 变量不会有任何帮助。无论如何,您不会多次致电
main,对吗?请告诉我们更多关于当您将某些内容放入事件处理程序时究竟发生了什么分裂的信息,并发布带有无效代码的minimal reproducible example。 -
@Bergi,真的,我完全同意。但是,我正在编写的程序是为github.com/Chatie/wechaty 编写的,我可以为此举一个最小的例子,但这取决于大量的模块,而且我不知道 nodejs 足够好,无法给出另一个事件触发示例最小的方式。我确实觉得制作一个全局承诺变量不会有任何帮助。这是我的困境。
-
您需要向我们展示不适用的情况的相关代码,描述您想要发生的情况并描述您观察到的与此不同的情况。现在,看起来你只是在向我们展示一件作品。而且,您可能需要显示
hotImport()的代码,因为如果它没有返回与完成时间相关的承诺,那么await将不会做您想做的事情。
标签: javascript node.js promise async-await