如何在递归函数内等待回调

时间:2017-03-07 17:06:01

标签: node.js asynchronous recursion callback wait

我有一个递归函数:

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
}

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

{{1}}

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

可以这样做吗?感谢

2 个答案:

答案 0 :(得分:1)

  

可以这样做吗?

是的,可以使用await,但要实现这个目的:

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

您的callback()需要返回承诺。从你的代码来看,它并不清楚。

答案 1 :(得分:1)

我这样做了:

我用ftp函数中的async编辑我的main函数:

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])

现在按预期等待。

谢谢!