Этот ответ применяется только в том случае, если updateColor
является асинхронным и действительно возвращает объект Promise
.
.map
возвращает массив чего-либо, а не Promise
. Что вы можете сделать, это построить массив Promise
, используя .map
, а затем разрешить их все, используя Promise.all
, а затем обработать результат.
Следующий код выполнит все updateColor
, подождитепока они не будут завершены, а затем прекратите соединение.
Promise.all(cars.map((item, i) => {
if (item.color === 'red') {
return updateColor(item.id);
}
return false;
}))
.then(() => connection.end())
Использование async/await
вместо Promises
await Promise.all(cars.map((item) => {
if (item.color === 'red') {
return updateColor(item.id);
}
return false;
}));
connection.end();
с использованием reduce
вместо map
await Promise.all(cars.reduce((tmp, x) => (x.color === 'red' ? [
...tmp,
updateColor(x.id),
] : tmp), []));
connection.end();