2016-04-12 15 views
1
私expressJSアプリケーションで

、私はthennable ...ブルーバードの約束 - 履行の順序が間違っていますか?

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

2つのFNS「connect2Redis」と「connect2db」は以下のように実装されている使用してシーケンス内の関数を返すラン2非同期約束をしようとしています:

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

私は2つのfnが "one-after-another"を実行することを期待しています。接続前と接続後の2つのログステートメントがあります。すべてがうまくいけば、私はRedisのキャッシュへの接続

は、@ localhostの...このようなログを見ることになっています:6379 [OK]データベースへ

同期... [OK]

アカウンティングサーバが正常に起動しました!

しかし、表示が混ざり合って、このようなものが表示されます。 Redisのキャッシュへの接続

は、@ localhostの:データベースに6379Synchronizing ... [OK]

会計Serverが正常に起動しました!

[OK]

私は、この第二FNは、その後、(使用して、connect2Redisの完了後に呼び出されるので、conenct2Redis FN内のログ・ステートメントは、connect2dbからログによって中断されることなく印刷され得る必要があることを期待していました... )

ここには何かがありますか?

答えて

2

は、あなたは私の愚かだった機能

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

を呼び出すのではなく、関数への参照を渡す必要があります。良いキャッチ。 –

+0

いつも小さなこと... :) @MupparthyRavindranath – baao

関連する問題