Throttle Menge von Versprechungen offen zu einem bestimmten Zeitpunkt
Das folgende Typescript führt jeden Aufruf von @ adoSomething(action)
eins nach dem anderen. (Das heißt, der zweite Eintrag in der Liste erhält erst dann einen Anruf, wenn der erste erledigt ist.)
async performActionsOneAtATime() {
for (let action of listOfActions) {
const actionResult = await doSomethingOnServer(action);
console.log(`Action Done: ${actionResult}`);
}
}
Dieser sendet alle Anfragen sofort an den Server (ohne auf Antworten zu warten):
async performActionsInParallel() {
for (let action of listOfActions) {
const actionResultPromise = doSomething(action);
actionResultPromise.then((actionResult) => {
console.log(`Action Done: ${actionResult}`);
});
}
}
Aber was ich wirklich brauche, ist eine Möglichkeit, sie zu drosseln. Vielleicht haben 10 oder 20 Anrufe gleichzeitig geöffnet. (Einer nach dem anderen ist zu langsam, aber alle 600 überlasten den Server.)
Aber es fällt mir schwer, das herauszufinden.
Haben Sie Vorschläge, wie ich die Anzahl der gleichzeitig geöffneten Anrufe an X drosseln kann?
(Diese Frage verwendet TypeScript, aber ich würde eine ES6-JavaScript-Antwort gut finden.)