我通过async await
使用babel-plugin-transform-async-to-generator
。
在顶级我等待功能响应。然后还有另外两个异步函数func1
和func2
。 func2
异步检索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")
}
答案 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")
}