2014-02-12 3 views
4

반환 후에도 코드가 계속 실행되는 이유와 res.send()가 호출 된 이유를 모르겠습니다. 이해를 돕기 위해 GIST입니다.'res.send();를 반환 한 후에도 코드가 계속 실행되는 이유는 무엇입니까?

UPDATE :

음, console.log()의 병렬, 비동기 발생하는 지역 사회의 도움으로 지금 발견하고 문제가 돌려 res.send(); 것을 이해 한 후.

이 특정 경우 솔루션은 if/else 안에 랩핑됩니다.

@Tom 및 @PaulPro 덕분에!

+6

'Hi2!'로 변경하면 'Hi!'라고 표시됩니까? (오직 100 % 확신 할 수있는 다른 곳에서는 길잃은'안녕! ') ... – user13500

+0

예! 나는 왜 그런지 이해하지 못한다. 나에게는별로 중요하지 않지만 어느 시점에서는 내 코드에 영향을 미칩니다. – CodeWarrior

+2

* "예, 여전히 '안녕하세요!'"*라고 말하면 아마도 편집중인 파일과 다른 파일을 실행하고있는 것일 수도 있습니다. – user13500

답변

15

Hi! 다음 코드 스 니펫을 사용하는 경우 Hi! 문자가 콘솔에 인쇄됩니다 (res.send 옆에 return이 없음). 요청 처리 기능과 콘솔 Hi!를 인쇄하지 않습니다

app.get('/asd', function (req, res) { 
    res.send('OK'); 
    console.log('Hi!'); 
}); 

다음 코드는 res.send('OK'); 표현과 함께 종료

app.get('/asd', function (req, res) { 
    return res.send('OK'); 
    console.log('Hi!'); 
}); 

첫 번째 인스턴스에서 Hi!을 볼 수있는 이유는 인 res.send 기능이 비동기 적으로 수행됩니다. 즉, 메서드 전송 응답이 JavaScript 이벤트 루프에 대기하고 요청 처리 함수가 실행을 계속하고 Hi! 인수로 console.log을 호출합니다.

도움이되기를 바랍니다.

+0

죄송합니다 @ 톰하지만 여전히 반환과 함께 '인사'를 인쇄합니다. – CodeWarrior

+0

@CodeWarrior, 그 경우에는'console.log ('Hi!')'를 수행하는 또 다른 코드가 어플 리케이션에 있어야합니다 (어딘가에'app.use'가 있어야합니다). '/ asd'핸들러를 변경하고'Hi! '를 수정 해 주실 수 있습니까?'안녕! in/asd 핸들러 '를 사용하여 변경된 텍스트가 출력되는지 확인하십시오. – Tom

+0

이 요지를보세요 : https://gist.github.com/thalesfsp/80fb332ee671e67fa0b4 이것은 코드입니다. 나는 app.use가 없다. :) – CodeWarrior

1

글쎄, 지금 커뮤니티의 도움을 얻은 후 문제가 그게 res.send()를 반환한다는 것을 알고 있습니다. console.log()와 병행하여 async가 발생합니다. 이 특별한 경우, 솔루션은 if() {} else {} 안에 랩됩니다. @ Tom과 @PaulPro 덕분에!

+1

우리가 도울 수있어서 기쁩니다. – Tom

관련 문제