我是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
定义为全局变量,并在调用{em> hotMod = await hotImport(MODULE_FILE)
之前的async init()
函数中执行main()
。但是到目前为止,由于我对JS / nodejs很陌生,所以我还没有做到。
请帮助。谢谢。
答案 0 :(得分:2)
异步函数返回承诺。因此,您应该可以使用then()
init()
.then(() => main())
如果init
返回了某些内容(例如hotMod
),则可以将其作为随后的回调的参数。
init()
.then((init_return) => {
// do something with init_return
return main()
})
答案 1 :(得分:1)
使用aysnc等待
async function myFlow(){
.....
await init();
main();
....
}
在上面的代码中,main()仅在initly resolve()时被调用。 希望对您有帮助。
答案 2 :(得分:0)
要同步运行它们,只需执行以下操作:
await init()
await main()