Node.JS ExpressJSasynchronous与同步
早上好,stackoverflow
我有这条路线:
app.get('/myaccount', messages.getMessages, function(req, res, next) { messages = ''; res.render('myaccount', { messages: messages }); });
messages.getMessages通过superagent向另一个服务器调用并获取一些消息以返回给用户(在该消息variables中)
这里的问题是,有时… messages.getMessages可能需要2-3秒来检索所有的消息,所以当我刷新页面有时我看到的消息…有时我不是非常随机的。
我对节点比较陌生,但是我认为messages.getMessages是asynchronous的,这样页面就可以被完全呈现,所有的variables都会在返回消息之前传递给jadejs。
我怎么基本上要求路线等待,直到我得到messages.getMessages数据之前继续呈现路线?
谢谢!
如果取决于你的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完成之前被调用。