Uso de promesas con fs.readFile en un bucle
Estoy tratando de entender por qué las siguientes configuraciones de promesa no funcionan.
(Nota: ya resolví este problema con async.map. Pero me gustaría saber por qué mis intentos a continuación no funcionaron).
El comportamiento correcto debería ser: bFunc debería ejecutarse tantas veces como sea necesario para leer todos los archivos de imagen (bFunc a continuación se ejecuta dos veces) y luego la consola de cFunc imprime "Fin".
¡Gracias!
Intento 1: se ejecuta y se detiene en 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");
}
Intento 2: en este caso, utilicé un bucle for pero se ejecuta fuera de orden. Impresiones de consola: Fin, bFunc hecho, bFunc hecho
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");
}
¡Gracias por la ayuda por adelantado!