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 waitress
ou conferir no github: https://www.github.com/ifit/waitress