Como posso limitar a promessa de concorrência Q?

Como escrevo um método que limita a simultaneidade de promessa Q?

Por exemplo, eu tenho um métodospawnProcess. Retorna uma promessa Q.
Eu quero não mais de 5 processos gerados de uma vez, mas de forma transparente para o código de chamada.

O que eu preciso implementar é uma função com assinatura

function limitConcurrency(promiseFactory, limit)

que eu posso ligar como

spawnProcess = limitConcurrency(spawnProcess, 5);

// use spawnProcess as usual

Eu já comecei a trabalhar na minha versão, mas gostaria de saber se alguém tem uma implementação concisa que eu possa verificar.

questionAnswers(4)

yourAnswerToTheQuestion