Как одновременно запустить несколько функций, дождаться выполнения и продолжить код?

let data = 3200
let start = 0, end = 500;
for (let  i = 0; i < Math.ceil(data.length / 500); i++){
await addDb(data.slice(start,end))
start += 500
end += 500
}

async function addDb(data){
console.log('addDB', data.length)
for await (const coin of data) {
    await mongoCollection.replaceOne({
        exchange: coin.exchange,
        symbol: coin.symbol
    }, coin, {upsert: true});
}
}

Как параллельно запустить несколько функций addDB, чтобы каждая записывала, часть строк? С await запускает по очереди, без await не ждет записи, код продолжает работать дальше.


Ответы (1 шт):

Автор решения: ksa

Как параллельно запустить несколько функций addDB, чтобы каждая записывала, часть строк?

Например вот так...

const p = [
  addDb('Задача 1', 4000),
  addDb('Задача 2', 2000),
  addDb('Задача 3', 1000),
  addDb('Задача 4', 3000),
  addDb('Задача 5', 1000),
]
Promise.allSettled(p)
  .then(a => console.log('тут можно анализировать результаты', a))
  .catch(console.log)

//
async function addDb(name, time) {
  await new Promise(res => setTimeout(res, time))
  console.log(name + ' завершена')
}

→ Ссылка