Использование Promises с fs.readFile в цикле
Я пытаюсь понять, почему нижеприведенные настройки не работают.
(Примечание: я уже решил эту проблему с помощью async.map. Но я хотел бы узнать, почему мои попытки ниже не сработали.)
Правильное поведение должно быть таким: bFunc должен запускаться столько раз, сколько необходимо, чтобы fs прочитал все файлы изображений (bFunc ниже запускается дважды), а затем консоль cFunc выдает «End».
Спасибо!
Попытка 1: он запускается и останавливается на 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");
}
Попытка 2: в этом случае я использовал цикл for, но он выполняется не по порядку. Печать на консоли: конец, bFunc сделано, bFunc сделано
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");
}
Спасибо за помощь в продвижении!