À l'aide de Promesses avec fs.readFile dans une boucle

J'essaie de comprendre pourquoi la ci-dessous promesse configurations ne fonctionnent pas.

(Note: j'ai déjà résolu ce problème avec async.carte. Mais je voudrais savoir pourquoi mes tentatives ci-dessous ne fonctionne pas.)

Le bon comportement devrait être: bFunc doit exécuter autant de fois que nécessaire pour fs lire tous les fichiers d'image (bFunc ci-dessous s'exécute deux fois) et puis cFunc console affiche "Fin".

Merci!

Tentative 1: Il court et s'arrête à 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");
}

Tentative 2:
Dans ce cas, j'ai utilisé une boucle for mais il s'exécute hors de l'ordre. Console imprime: Fin, bFunc fait, bFunc fait

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");
}

Merci pour l'aide à l'avance!

  • Dans la tentative de 1, quel est votre gestionnaire d'erreur pour bFunc? Si une erreur est levée, vous ne saurez jamais ce sujet avec votre code actuel.
  • Quel est le but de ce code? Veuillez décrire le problème que vous essayez de résoudre par des mots plutôt que de simplement nous montrer le code qui ne fait pas ce que vous voulez. Il y a beaucoup de choses de mal avec votre code donc je préfère commencer de comprendre le problème à résoudre que d'essayer de retravailler toutes les choses de mal avec votre code sans en connaître la fin réelle de l'objectif.
  • il ne jette pas une erreur à la bFunc! Mais je suppose que je devrais mettre une capture à la fin de la chaîne.
  • J'ai enlevé tout le détail de ce code et juste à gauche de la structure, de le simplifier. Le problème est le même, mais si cela peut aider, j'ai été en utilisant Microsoft Projet d'Oxford pour la détection de visage et puis, à chaque "."je augmenter la photo avec des lunettes, des chapeaux, etc. Je peux partager le code source avec vous. Merci.
  • Eh bien, pensez-y de notre point de vue. - Vous nous donner deux blocs de code qui ne fonctionnent pas et nous demander comment les corriger. Mais, vous n'avez jamais vraiment décrire ce qu'ils sont censés faire (ce que le comportement correct est). Sommes-nous censés deviner à partir du dysfonctionnement code ce le bon comportement? Veuillez décrire le souhaité et le bon comportement que vous souhaitez à partir de bloc de code.
  • Je vois votre point de vue et j'ai édité le post: Le bon comportement devrait être: bFunc doit exécuter autant de fois que nécessaire pour fs lire tous les fichiers d'image (bFunc s'exécute deux fois dans ce cas) et puis cFunc console affiche "Fin".
  • Êtes-vous essayer d'appeler fs.readFile() plusieurs fois pour lire les fichiers en parallèle? Jetez un oeil à codendeavor.com/...
  • J'aime ceci réponse

InformationsquelleAutor David | 2016-01-06