代码之家  ›  专栏  ›  技术社区  ›  xpt

nodejs一个接一个地运行异步函数

  •  0
  • xpt  · 技术社区  · 7 年前

    我是JS/nodejs新手,所以如果我不能直截了当地提问,请原谅。

    基本上,如果我有两个异步函数,

    async function init() {...}
    async function 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 等候 异步的 导致问题的函数。因此,我试图定义 霍特莫德 hotMod = await hotImport(MODULE_FILE) 在一个 async init() 作用 main() 被称为。但到目前为止,我还不能,因为我对JS/nodejs还很陌生。

    3 回复  |  直到 7 年前
        1
  •  7
  •   Varun Sukheja    7 年前

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

    在上面的代码中,只有在解析init()时才会调用main()。

        2
  •  5
  •   Mark    7 年前

    异步函数返回承诺。所以你应该可以一个接一个地打电话 then()

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

    如果 init 返回某物(例如 hotMod ),您可以将其作为参数提取到then的回调。

    init()
    .then((init_return) => {
       // do something with init_return
       return  main()
    })
    
        3
  •  1
  •   cthuluhoop123    7 年前

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

    await init()
    await main()
    
    推荐文章