Node.JS ExpressJS异步vs同步

时间:2012-12-20 15:41:28

标签: node.js pug express

早上好stackoverflow

我有这条路线:

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 个答案:

答案 0 :(得分:2)

如果取决于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完成之前调用next()。