早上好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数据?
谢谢!
答案 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()。