等待深度异步等待来自深度函数调用的结果?

时间:2016-08-13 21:53:33

标签: javascript node.js asynchronous async-await ecmascript-6

我通过async await使用babel-plugin-transform-async-to-generator

在顶级我等待功能响应。然后还有另外两个异步函数func1func2func2异步检索https://www.google.com

的内容

以下脚本返回:

go() called
func1() called
finished
func2() called
func2() called
func2() called

在所有通话成功执行后,我怎能只console.log('finished')?是否可以使用resolve / reject显式返回Promise

这个例子大大简化了。我试图做的事情涉及递归函数调用我也要等待

const rp = require('request-promise')

go()

async function go() {
  console.log("go() called")
  await func1([1,2,3])
  console.log("finished the script")
}

async function func1(arr) {
  console.log("func1() called")
  arr.forEach(async function(element) {
    await func2()
  })
}

async function func2() {
  var res = await rp('https://www.google.com')
  console.log("func2() called")
}

1 个答案:

答案 0 :(得分:0)

我仍然不确定如何为递归调用执行此操作,但会为其创建单独的问题/示例。

可以使用for..of代替forEach修复上述示例。内部函数结果不能await

const rp = require('request-promise')

go()

async function go() {
  console.log("go() called")
  await func1([1,2,3])
  console.log("finished the script")
}

async function func1(arr) {
  console.log("func1() called")

  for (let item of arr) {
    await func2()
  }
}

async function func2() {
  var res = await rp('https://www.google.com')
  console.log("func2() called")
}