Node.JS ExpressJSasynchronous与同步

早上好,stackoverflow

我有这条路线:

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

messages.getMessages通过superagent向另一个服务器调用并获取一些消息以返回给用户(在该消息variables中)

这里的问题是,有时… messages.getMessages可能需要2-3秒来检索所有的消息,所以当我刷新页面有时我看到的消息…有时我不是非常随机的。

我对节点比较陌生,但是我认为messages.getMessages是asynchronous的,这样页面就可以被完全呈现,所有的variables都会在返回消息之前传递给jadejs。

我怎么基本上要求路线等待,直到我得到messages.getMessages数据之前继续呈现路线?

谢谢!

如果取决于你的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); } 

因为在最后一个例子中,next()将在superAgent完成之前被调用。