Не знаю, правильна ли терминология, но у меня есть массив объектов, в котором также есть другие массивы. Мне нужно пройти через каждый из этих пунктов. Если операция не была асинхронной, она выглядела бы примерно так:
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
, но я сомневаюсь, что это самый эффективный или элегантный способ сделать это. Так как я мог это сделать?