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!

Respuestas a la pregunta(4)

Su respuesta a la pregunta