Сокращение времени обработки без "остановки" обещаний
Вы не можете действительно давать обещания стоп .Но так как вы хотите уменьшить количество вызовов базы данных , вы можете выборочно выполнить свои обещания .
ДляНапример, вы можете включить условное выражение в вашу функцию map
.Например,
if commonNumbers.length < maxLength
, затем верните мне Обещание, содержащее вызов базы данных - Иначе, просто разрешите случайное значение (например,
false
в моем примере)
Ваши обещания по-прежнему будут выполняться, но вы будете ограничивать количество вызовов БД необходимым .Это будет выглядеть примерно так
const arr = [1, 2, 3, 4, 5, 6];
const buffer = [];
const maxLenBuffer = 3;
const p = Promise.all(
arr.map(n => {
if (buffer.length < maxLenBuffer) {
buffer.push(n);
return Promise.resolve(n);
} else {
// There's still a promise to be resolved, but it's not a HTTP call
// This gives you the gain of performance you're looking for
return Promise.resolve(false);
}
})
);
p.then(() => console.log(buffer));
Примечание
Хотя это может уменьшить ваши вызовы в базе данных, фактическое количество вызовов может быть немного выше, чем ваше максимум указано.Это связано с асинхронной природой вызовов