Ответ 1
Короткий ответ: да, это ограничит количество запросов до 5.
Предостережение: имейте в виду, что вы все еще можете быть подвержены большему количеству ограничений, таких как клиент HTTP или любые другие пулы, модули и службы, которые вы могли бы использовать.
Кроме того, соединение Mongo должно использоваться как постоянное, поэтому вы должны, вероятно, только открыть его, а затем использовать его, а не открывать и закрывать каждый раз.
Если createDatesArray
не делает ничего асинхронного, вам не нужно выполнять Promise.resolve, вместо этого вы можете использовать статический вариант map
как Promise.map(datesArray, function(date){ ... })
и т.д. Я бы тоже не вложил. Предполагая, что createDatesArray
действительно async:
Promise.join(getNames(), createDatesArray(), function(names, dates){
var tasks = [];
names.forEach(function(name ){ // create Cartesian product of names * dates
dates.forEach(function(date){
tasks.push(function(){ return requestData(name, date); });
});
});
return Promise.map(tasks, function(job){ return job(); } , { concurrency: 5} );
}), then(function(results){
// do whatever
});