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

questionAnswers(2)

yourAnswerToTheQuestion