【发布时间】:2021-03-30 09:26:49
【问题描述】:
我目前有一个这样的 for 循环:
async myFunc() {
for (l of myList) {
let res1 = await func1(l)
if (res1 == undefined) continue
let res2 = await func2(res1)
if (res2 == undefined) continue
if (res2 > 5) {
... and so on
}
}
}
问题是 func1、func2 是返回承诺的网络调用,我不希望它们在等待它们时阻塞我的 for 循环。所以我不介意与 myList[0] 和 myList[1] 并行工作,也不关心列表项的处理顺序。
我怎样才能做到这一点?
【问题讨论】:
-
您可以让他们解决/拒绝该承诺,然后在循环中调用它们,而不是让他们返回一个承诺。如果您不想处理回复。
-
如果有更多代码,看看是否一切都设置正确,那就太好了。通常你会在等待 Promise 之后使用
.then()做一些事情,以确保它按顺序运行。然后你可以在第二次调用中调用另一个函数,就像.then((result) => { callAnotherFunction(result); }) -
@Frizzant - 在
async函数中,您使用await(就像上面的OP 所做的那样),而不是.then(95% 的时间)。
标签: javascript typescript async-await promise