【发布时间】:2019-10-29 12:29:17
【问题描述】:
不知道术语是否正确,但我有一个对象数组,其中也有其他数组。我需要通过这些项目中的每一个。如果操作不是异步的,它看起来像这样:
myArray.forEach(x => {
x.otherArray.forEach(y => {
doSomething(y)
})
})
然而doSomething 函数是async,不幸的是我很清楚在这些迭代期间我不能简单地通过几个异步和等待使其工作。
通常,当我需要在迭代期间执行承诺时,我会执行以下操作:
await myArray.reduce((p, item) => {
return p.then(() => {
return doAsyncSomething(item)
})
}, Promise.resolve())
但是因为我同时进行两次迭代,这变得有点复杂,那我该怎么做呢?
我目前有这样的东西,但它似乎不是正确的方法:
await myArray.reduce((p, item) => {
return item.someArray.reduce((promise, it, index) => {
return promise.then(() => {
return doAsyncSomething()
})
}, Promise.resolve())
}, Promise.resolve())
我知道我可以通过两个forEach 将我的对象组织成一个数组,然后在其中执行reduce 和doSomething,但我怀疑这是完成它的最有效或最优雅的方式。那我该怎么做呢?
【问题讨论】:
标签: javascript arrays async-await