Как предлагают другие пользователи, лучшим решением вашей проблемы будет использование типа запроса WHERE id IN ( .. )
.
Проблема в вашем случае - параллелизм операций. N операций выполняются параллельно, что является причиной проблемы. В худшем случае они могут даже вызвать неожиданные сбои или увеличение использования ресурсов для вашего процесса NodeJS.
Q
или собственный Promise
не имеет метода для контроля параллелизма выполнения. Если вам абсолютно необходимо использовать Promise.all, я бы предложил использовать Bluebird.map
( Link ).
const process = () => {
const arrayOfIds = [id1, id2, id3, id4 .... idn]
return Bluebird.map(arrayOfIds,
(id) => getById(id),
{ concurrency: 5 } // Default +Inifinity
)
.then(resultArray => {
// utilization of result array
})
}
Конечно, вам нужно убедиться, что обещание, возвращаемое getById
, совместимо с Bluebird (не уверен насчет Q обещания, но собственное обещание есть)