【问题标题】:Node.JS ExpressJS async vs syncNode.JS ExpressJS 异步与同步
【发布时间】:2012-12-20 23:58:20
【问题描述】:

早安stackoverflow

我有这条路线:

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

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

});

messages.getMessages 通过 superagent 调用另一台服务器并获取一些消息以返回给用户(在那个 messages 变量中)来做很多事情

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

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

我怎样才能基本上要求路由等到我得到 messages.getMessages 数据后再继续渲染路由?

谢谢!

【问题讨论】:

    标签: node.js pug express


    【解决方案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);
    }
    

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

    【讨论】:

      猜你喜欢
      • 2015-02-23
      • 1970-01-01
      • 2013-05-11
      • 1970-01-01
      • 1970-01-01
      • 2017-03-19
      • 2012-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多