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).

Respuestas a la pregunta(5)

Su respuesta a la pregunta