Acelerar la cantidad de promesas abiertas en un momento dado
El siguiente mecanografiado realiza cada llamada adoSomething(action)
uno a la vez. (Es decir, el segundo elemento de la lista no recibe una llamada hasta que finalice el primero).
async performActionsOneAtATime() {
for (let action of listOfActions) {
const actionResult = await doSomethingOnServer(action);
console.log(`Action Done: ${actionResult}`);
}
}
Este enviará todas las solicitudes al servidor de inmediato (sin esperar ninguna respuesta):
async performActionsInParallel() {
for (let action of listOfActions) {
const actionResultPromise = doSomething(action);
actionResultPromise.then((actionResult) => {
console.log(`Action Done: ${actionResult}`);
});
}
}
Pero lo que realmente necesito es una forma de estrangularlos. Tal vez tenga 10 o 20 llamadas abiertas a la vez. (Uno a la vez es demasiado lento, pero los 600 sobrecargarán el servidor).
Pero estoy teniendo dificultades para resolver esto.
¿Alguna sugerencia sobre cómo puedo acelerar el número de llamadas a X abiertas a la vez?
(Esta pregunta usa TypeScript, pero estaría bien con una respuesta ES6 JavaScript).