2016-04-12 11 views
1

In meiner Express.js Anwendung, ich versuche async Versprechen Lauf 2 Funktionen in einer Sequenz thennable ...bluebird verspricht - falsche Reihenfolge der Erfüllung?

verwenden Rückkehr
connect2Redis(config.cache) 
.then(connect2db()) 
.then(function() { 
    console.log("Accounting Server started successfully!"); 
    }) 
}) 
.catch(function(e){ 
    console.error("Failed to start Accounting server. Error: ", e); 
}) 

Die beiden FNS 'connect2Redis' und 'connect2db' umgesetzt, wie unten:

function connect2Redis(opts) { 
    var connectingMsg = "Connecting to Redis Cache @" + config.cache.host + ":" +config.cache.port; 
    process.stdout.write(connectingMsg); 
    return new Promise(function(resolve, reject){ 
    var redisClient = redis.createClient(opts); 
    redisClient.on('ready', function(){ 
     console.log(" [ " + "OK".green + " ]"); 
     return resolve(redisClient); 
    }) 
    redisClient.on('error', function(e){ 
     console.log("[" + "FAIL".red + "]"); 
     return reject(e); 
    }) 
    }); 
} 


function connect2db() { 
    process.stdout.write("Synchronizing to database..."); 
    return DB.sequelize.sync().then(function() { 
    console.log(" [ " + "OK".green + " ]"); 
    }).catch(function(e) { 
    console.log("[" + "FAIL".red + "]"); 
    return e; 
    }); 
} 

Ich erwarte, dass die beiden fns "hintereinander" ausführen, da ich sie mit dem thennable verkettet habe. Es gibt zwei Protokollanweisungen vor der Verbindung und eine nach der Verbindung. Wenn alles gut geht, ich soll logs so sehen ...

Anschluss an Redis Cache @localhost: 6379 [OK]

Synchronisieren zur Datenbank ... [OK]

Accounting Server wurde erfolgreich gestartet!

Aber das Display wird durcheinander gebracht, und ich sehe so etwas.

zu Redis Cache Connecting @localhost: 6379Synchronizing zur Datenbank ... [OK]

Accounting-Server erfolgreich gestartet!

[OK]

ich, dass log Aussagen in conenct2Redis fn erwarten sollte, ohne sich unterbrochen durch Protokolle von connect2db gedruckt werden, weil diese zweite fn nach Beendigung der connect2Redis aufgerufen wird, dann mit (...)

Gibt es etwas, das mir hier fehlt?

Antwort

2

Sie müssen einen Verweis auf die Funktion zu übergeben, anstatt die Funktion des Aufrufs

connect2Redis(config.cache) 
    .then(connect2db) 
+0

Die dumm von mir war. Guter Fang. –

+0

Immer die kleinen Dinge ... :) @MupparthyRavindranath – baao

Verwandte Themen