2012-12-20 65 views
1

早上好計算器Node.js的ExpressJS異步VS同步

我有這樣的路線:

app.get('/myaccount', messages.getMessages, function(req, res, next) { 
    messages = ''; 

    res.render('myaccount', { 
    messages: messages 
    }); 

}); 

的messages.getMessages經由SuperAgent的呼喚到另一臺服務器,並得到一些信息做了一堆東西(在該消息變量中)

這裏的問題是,有時候... messages.getMessages可能需要2-3秒才能檢索所有消息,所以當我刷新頁面時,有時會看到消息...有時候我不會很隨意。

我對節點比較陌生,但我認爲messages.getMessages是異步的,這樣頁面可以完全呈現​​並且所有變量在返回消息之前傳遞給jadejs。

我如何基本上要求路線等待,直到我得到messages.getMessages數據之前繼續呈現路線?

謝謝!

回答

1

如果取決於您的getMessages函數的結構。它應該是這樣的:

getMessages = function(req, res, next) { 
    // asuming superAgent is async, pass the next 
    // function to it to call it AFTER it has completed 
    superAgent(x, req, res, next); 
} 

superAgent = function(x, req, res, next) { 
    // do something 
    ... 
    // call the callback 
    next(req, res); 
} 

要注意的重要的事情是,你的getMessages應該是這個樣子:

getMessages = function(req, res, next) { 
    superAgent(x); 
    next(req, res); 
} 

,因爲在接下來的()最後這個例子的SuperAgent完成之前被稱爲。