Wie die bluebird Parallelität option für die map-Funktion
Ich bin versucht, bluebird ' s map-Funktion mit der integrierten Steuerung der Gleichzeitigkeit.
Möchte ich zum abrufen einer Liste der Namen, dann machen Sie eine Reihe von POST-Anfragen für jeden Namen. Zum Beispiel möchte ich eine Anfrage für jeden Namen für jeden Tag der Woche. Jedoch, ich muss Gas, die Anzahl der gleichzeitigen Anforderungen POST, weil der vorgesehene server hat rate Grenzen.
function getNames() {
//Open mongodb connection
//Get collection and array of names
//return array of names in a promise
}
function createDatesArray() {
//Create an array of rates
//return array of dates in a promise
//Ex. return Promise.resolve(datesArray);
}
getNames().map(function (name) {
return createDatesArray().map(function (date) {
return requestData(date, name);
}, {concurrency: 5});
}).then(function () {
//do something
});
Ist dies die richtige Art und Weise zu verwenden bluebird ist Parallelität?
Den link zur Dokumentation hier bluebird Dokumentation.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Kurze Antwort: ja , dies begrenzt die Anzahl der Anfragen zu 5.
Achtung: denken Sie daran, Sie könnten immer noch anfällig sein, um Grenzen mehr gesetzt, wie der HTTP-client ist, oder jede andere pools, Module und Dienstleistungen, die Sie möglicherweise verwenden.
Auch, eine Mongo-Verbindung verwendet werden soll wie eine persistente, also sollten Sie wohl nur öffnen und dann nutzen Sie Sie, anstatt Sie zu öffnen und zu schließen, jedes mal.
Wenn
createDatesArray
tut man nicht alles asynchron, Sie nicht zu Versprechen.zu lösen, können Sie stattdessen verwenden Sie die statische Variante vonmap
alsPromise.map(datesArray, function(date){ ... })
etc. Ich würde auch kein nest. VorausgesetztcreateDatesArray
ist tatsächlich async: