2012-12-20 3 views
1

좋은 아침 유래Node.js를 ExpressJS 비동기 동기 대비

나는이 경로가 :

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 데이터를 얻을 때까지 기본적으로 경로가 대기하도록하려면 어떻게해야합니까?

감사합니다.

답변

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

.

관련 문제