Faire un synchrone boucle de synchrone des rappels avec node.js + Q différé/promesses module

Le populaire JavaScript module Q met en œuvre le différé /promesse /contrats à terme de concept. Je pense que c'est principalement utilisée avec node.js mais il soutien navigateur qu'il utilise. Je l'utilise avec node.js.

Faire séquentielle vous appelle de la chaîne d'une promesse à l'autre à l'aide de then() mais dans une boucle, il peut être contre-intuitif que j'ai du mal à faire la même chose que ce pseudo-code:

forever {
    l = getline();

    if (l === undefined) {
        break;
    } else {
        doStuff(l);
    }
}

Le Q de la documentation inclut un exemple de ce qui semble assez similaire:

var funcs = [foo, bar, baz, qux];

var result = Q.resolve(initialVal);
funcs.forEach(function (f) {
    result = result.then(f);
});
return result;

Mais en essayant de nombreuses façons d'adapter cet exemple à mon problème, je vais avoir pas de succès du tout.

Contrairement à l'exemple de code que je ne suis pas une itération sur un tableau, mais qui souhaitent en boucle jusqu'à ce qu'une condition de fin est rencontré. Aussi j'ai toujours appeler la même fonction. Ma fonction ne prend pas le résultat précédent en tant que paramètre à l'appel suivant. Chaque appel ne prend pas d'arguments, mais la valeur de retour décide de continuer la boucle.

Ces anodin différences sont à l'origine de certains type de insurmontable blocage mental. Maintenant, je peux voir pourquoi beaucoup de gens ont de la difficulté à comprendre promesses.

OriginalL'auteur hippietrail | 2013-02-17