Fazendo Download de Arquivos com node.js, Fluxos e Promessas
Aqui está um trecho do meu código:
var processListing = function (directoryItems) {
console.log('foreach');
var itemsToDownload = [];
directoryItems.forEach(function (element, index, array) {
//Ignore directories
if (element.type === 'd') {
console.log('directory ' + element.name);
return;
}
//Ignore non zips
if (path.extname(element.name) !== '.zip') {
console.log('ignoring ' + element.name);
return;
}
//Download zip
itemsToDownload.push({
source: element.name,
destination: element.name
});
//aftpSystem.downloadFile(element.name, element.name);
});
console.log('after foreach');
return itemsToDownload;
};
var getFiles = function () {
console.log('got files');
return fs.readdirAsync(process.cwd() + "/zips/").then(function (files) {
return files.filter(function (filename) {
return path.extname(filename) === '.zip';
});
});
};
aFtpClient. //this has been promisified
listAsync(). //so calls methodAsync
then(processListing).
map(function (object) {
return processItem(object).then(function (processResult) {
return {
input: object,
result: processResult
};
});
}).
map(function (downloadItem) {
console.log('downloading files');
downloadItem.result.once('close', function () {
console.log('closed');
});
return downloadItem.result.pipe(fs.createWriteStream(process.cwd() + "/zips/" + downloadItem.input.destination));
}).
then(getFiles).
Estou tentando usar promessas para baixar itens via FTP. No momento, ele baixa o primeiro arquivo, mas falha nos arquivos subsequentes. Eu sou novo no nó, mas estou bastante confiante de que minha segunda função de mapa precisa retornar uma promessa, no entanto, não consegui descobrir como, após inúmeras tentativas. estou usandobluebird
por promessas, mas não consegue ver como trabalhar com ela e fluxos.
Você poderia me apontar na direção correta?
obrigado