繁体   English   中英

nodejs接连运行异步功能

[英]nodejs run async function one after another

我是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 ,但在导致此问题的异步函数等待 hotImport。 因此,我试图将hotMod定义为全局变量,并在调用main() 之前async init()函数中执行hotMod = await hotImport(MODULE_FILE) 但是到目前为止,由于我对JS / nodejs很陌生,所以我还没有做到。

请帮忙。 谢谢。

异步函数返回承诺。 因此,您应该可以使用then()一个接一个地调用

init()
.then(() => main())

如果init返回了某些内容(例如hotMod ),则可以将其作为随后的回调的参数。

init()
.then((init_return) => {
   // do something with init_return
   return  main()
})

使用aysnc等待

async function myFlow(){
.....
await init();
main();
....
}

在上面的代码中,main()仅在initly resolve()时被调用。 我希望这可以帮助你。

要同步运行它们,只需执行以下操作:

await init()
await main()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM