【问题标题】:How to wait callback inside recursive function如何在递归函数中等待回调
【发布时间】:2017-07-28 00:06:24
【问题描述】:

我有一个递归函数:

let main = () => {
  ftp(_defaultPath, _start, (file, doc, name) => {
    parser(file, doc, name)
  })
}

解析器函数:

module.exports = async function (file, doc, name) {
    await funcOne(file, doc)
    await funcTwo(file, doc, name)
    await funcThree(file, doc, name)
}

在递归函数中多次调用回调:

async function myFuntion(path, name, callback) {
   ...
   callback(file, doc, files[p][1])
   ...
}

问题是我想在回调时等待:

async function myFuntion(path, name, callback) {
   ...
   await callback(file, doc, files[p][1])
   ... next lines need to wait to finish callback
}

我试图找到如何做到这一点。

有可能吗?谢谢

【问题讨论】:

    标签: node.js asynchronous recursion callback wait


    【解决方案1】:

    我已经这样做了:

    我在 ftp 函数中使用异步编辑我的主函数:

    let main = () => {
      ftp(_defaultPath, _start, async (file, doc, name) => {
        await parser(file, doc, name)
      })
    }
    

    我向解析器函数添加了这样的承诺:

    module.exports = function (file, doc, name) {
        return new Promise( async (resolve, reject) => {
            try {
                await funcOne(file, doc)
                await funcTwo(file, doc, name)
                await funcThree(file, doc, name)
            } catch(e) {
                return reject(e)
            }
            return resolve()
        }
    }
    

    在递归函数中,我执行等待。

    await callback(file, doc, files[p][1])
    

    现在按预期等待。

    谢谢!

    【讨论】:

      【解决方案2】:

      有可能吗?

      是的,可以使用await,但要让它工作:

      await callback(file, doc, files[p][1])
      

      您的callback() 需要返回一个承诺。从您的代码中并不清楚它确实如此。

      【讨论】:

      • 谢谢!只是我找到了解决方案:D
      猜你喜欢
      • 2019-08-23
      • 2020-09-29
      • 2019-02-20
      • 2018-12-30
      • 2020-09-08
      • 2022-01-27
      • 2017-06-22
      • 2021-06-03
      • 2015-07-27
      相关资源
      最近更新 更多