gpt4 book ai didi

javascript - Node js 中循环的异步问题

转载 作者:太空宇宙 更新时间:2023-11-04 03:28:40 26 4
gpt4 key购买 nike

我正在尝试迭代抛出一个项目列表,并通过调用 API 对它们执行一些操作,如下例所示:

  for (i = 0; i < arr.length; i++) {  
if (arr[i].id == 42) {
api.requestAction(arr[i].id, function(error, response){ });
}
}

问题是循环显然在所有请求完成并且程序退出之前就结束了。我应该做什么来管理它?我看到了“Promise”方法,但真的不知道在这种情况下如何使用它,或者也许还有其他解决方案。

提前谢谢您!

最佳答案

node-fetch (promisify http api)您可以与 async/await 一起停止 for 循环,直到完成,但这需要添加 --harmony-async-await 标志的 Node v6+

const fetch = require('node-fetch')

async function foo() {
for (let item of arr) {
if (item.id == 42) {
let res = await fetch(url)
let body = await res.text()
console.log(body)
}
}
console.log('done (after request)')
}

现在,每次您在函数前面添加 async 关键字时,它总是会返回一个在一切完成后解析/拒绝的 promise

foo().then(done, fail)
<小时/>

如果你不想安装node-fetch,你可以将 api fn 包装在一个 promise 中

await new Promise((rs, rj) => {
api.requestAction(arr[i].id, function(error, response){
error ? rj(error) : rs(response)
})
})

关于javascript - Node js 中循环的异步问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41182673/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com