Jak mogę ograniczyć współbieżność obietnic Q?

Jak napisać metodę ograniczającą współbieżność obietnicy Q?

Na przykład mam metodęspawnProcess. Zwraca obietnicę Q.
Chcę nie więcej niż 5 procesów naraz w danym momencie, ale w sposób przezroczysty dla kodu wywołującego.

To, co muszę wdrożyć, to funkcja z podpisem

function limitConcurrency(promiseFactory, limit)

mogę to nazwać

spawnProcess = limitConcurrency(spawnProcess, 5);

// use spawnProcess as usual

Zacząłem już pracować nad moją wersją, ale zastanawiam się, czy ktoś ma zwięzłą implementację, którą mogę sprawdzić.

questionAnswers(4)

yourAnswerToTheQuestion