Richtiger Weg, Schleifen für Versprechen zu schreiben.

Wie ordnungsgemäß zu erstellen eine Schleife, um sicherzustellen, dass die folgenden Versprechen nennen und die verkettete logger.log(res) läuft synchron durch iteration? (bluebird)

db.getUser(email).then(function(res) { logger.log(res); }); //this is a promise

Habe ich versucht, das auf folgende Weise (Methode von http://blog.victorquinn.com/javascript-promise-while-loop )

var Promise = require('bluebird');

var promiseWhile = function(condition, action) {
    var resolver = Promise.defer();

    var loop = function() {
        if (!condition()) return resolver.resolve();
        return Promise.cast(action())
            .then(loop)
            .catch(resolver.reject);
    };

    process.nextTick(loop);

    return resolver.promise;
});

var count = 0;
promiseWhile(function() {
    return count < 10;
}, function() {
    return new Promise(function(resolve, reject) {
        db.getUser(email)
          .then(function(res) { 
              logger.log(res); 
              count++;
              resolve();
          });
    }); 
}).then(function() {
    console.log('all done');
}); 

Obwohl es scheint zu funktionieren, aber ich glaube nicht, dass es garantiert, dass die Reihenfolge der Berufung logger.log(res);

Irgendwelche Vorschläge?

InformationsquelleAutor der Frage user2127480 | 2014-07-09

Schreibe einen Kommentar