Controle de fluxo paralelo Node.js

Em node.js, às vezes você deseja fazer várias solicitações assíncronas simultaneamente. Você geralmente começa escrevendo algo como:

var fs = require('fs')
, fileList = ['file1.txt', 'file2.txt', 'file3.txt']

var numFinished = 0;
function done(err, data) {
numFinished
+= 1;
if (numFinished < fileList.length) return;
console
.log('got all files');
}

for (var i = 0; i < fileList.length; ++i) {
fs
.readFile(fileList[i], done);
}

Mas pode ser cansativo e irritante reescrever esse clichê o tempo todo. Então eu escrevi uma biblioteca chamada garçonete, ela vai cuidar de tudo para você:

var fs = require('fs')
, waitress= require('waitress')
, fileList = ['file1.txt', 'file2.txt', 'file3.txt']

var done = waitress(fileList.length, function(err, results) {
console
.log('got all files');
});

for (var i = 0; i < fileList.length; ++i) {
fs
.readFile(fileList[i], done);
}

Basta dar à garçonete o número de vezes que ela deve aguardar o retorno de chamada ser chamado, e um retorno de chamada, e mágica! Controle de fluxo simples e fácil.

Você pode instalar garçonete com npm install waitressou conferir no github: https://www.github.com/ifit/waitress