Herunterladen von Dateien mit node.js, Streams und Versprechungen

Hier ist ein Ausschnitt aus meinem Code:

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).

Ich versuche, Versprechen zu verwenden, um Elemente über FTP herunterzuladen. Momentan lädt es die erste Datei herunter, schlägt jedoch bei nachfolgenden Dateien fehl. Ich bin neu in Node, aber ziemlich zuversichtlich, dass meine zweite Kartenfunktion ein Versprechen abgeben muss, aber ich konnte nach zahlreichen Versuchen nicht herausfinden, wie. ich benutzebluebird Für Versprechungen kann ich aber nicht sehen, wie ich damit umgehen soll und Streams.

Könnten Sie mich in die richtige Richtung weisen?

Vielen Dank

Antworten auf die Frage(2)

Ihre Antwort auf die Frage