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!