Using Promises with fs.readFile in einer Schleife

Ich versuche zu verstehen, warum die folgenden Versprechen nicht funktionieren.

(Hinweis: Ich habe dieses Problem bereits mit async.map gelöst. Ich möchte jedoch erfahren, warum meine unten aufgeführten Versuche nicht funktioniert haben.)

Das korrekte Verhalten sollte lauten: bFunc sollte so oft wie nötig ausgeführt werden, um alle Image-Dateien zu lesen (bFunc unten wird zweimal ausgeführt), und dann gibt die cFunc-Konsole "End" aus.

Vielen Dank

Versuch 1: Läuft und stoppt bei cFunc ().

var fs = require('fs');

bFunc(0)
.then(function(){ cFunc() }) //cFunc() doesn't run

function bFunc(i){
    return new Promise(function(resolve,reject){

        var imgPath = __dirname + "/image1" + i + ".png";

        fs.readFile(imgPath, function(err, imagebuffer){

            if (err) throw err;
            console.log(i)

            if (i<1) {
                i++;
                return bFunc(i);
            } else {
                resolve();
            };

        });

    })
}

function cFunc(){
    console.log("End");
}

Versuch 2: In diesem Fall habe ich eine for-Schleife verwendet, die jedoch nicht in der richtigen Reihenfolge ausgeführt wird. Konsolendrucke: Ende, bFunc erledigt, bFunc erledigt

var fs = require('fs');

bFunc()
        .then(function(){ cFunc() })

function bFunc(){
    return new Promise(function(resolve,reject){

        function read(filepath) {
            fs.readFile(filepath, function(err, imagebuffer){
                if (err) throw err;
                console.log("bFunc done")
            });
        }

        for (var i=0; i<2; i++){
            var imgPath = __dirname + "/image1" + i + ".png";
            read(imgPath);
        };

        resolve()
    });
}


function cFunc(){
    console.log("End");
}

Danke für die Hilfe im Voraus!

Antworten auf die Frage(8)

Ihre Antwort auf die Frage