2012-12-20 66 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完成之前被称为。