1

おはようスタックオーバーフロー

私はこのルートを持っています:

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

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

});

messages.getMessages は、スーパーエージェントを介して別のサーバーを呼び出し、いくつかのメッセージを取得してユーザーに戻すことで、さまざまなことを行います (そのメッセージ変数で)

ここでの問題は、ときどき... messages.getMessages がすべてのメッセージを取得するのに 2 ~ 3 秒かかることがあるため、ページを更新するとメッセージが表示されることがあります...ときどきランダムではないことがあります。

私はノードにかなり慣れていませんが、messages.getMessages は非同期であるため、ページが完全にレンダリングされ、すべての変数が jadejs に渡されてからメッセージが返されると想定しています。

ルートのレンダリングに進む前に、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);
}

この最後の例では、superAgent が完了する前に next() が呼び出されるためです。

于 2012-12-20T15:58:20.683 に答える