1

早上好堆栈溢出

我有这条路线:

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

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

});

messages.getMessages 通过超级代理调用另一台服务器并获取一些消息以带回给用户(在该消息变量中)来做很多事情

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

我对节点比较陌生,但我认为 messages.getMessages 是异步的,因此页面可能会完全呈现,并且在我取回消息之前将所有变量传递给 jamjs。

在继续渲染路由之前,我基本上如何要求路由等到我得到 messages.getMessages 数据?

谢谢!

4

1 回答 1

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

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

于 2012-12-20T15:58:20.683 回答