2017-12-17 13 views
0

게시 요청에서 두 가지 기능을 실행하려고 시도하지만 하나만 실행됩니다. 함수 makeEntry가 실행되지만 그 이후의 함수 renderEntries는 실행되지 않습니다. 누구든지 pls 수 있습니까? 다음은 코드입니다. https://codepaste.net/bpsxsyNode.js 함수가 하나만 실행되었습니다.

+0

자세한 정보를 제공해 주시겠습니까? 어떤 오류가 발생할 수 있습니까? 사용자가 로그인하지 않은 경우 발생합니까? – Kostas

+0

사용자가 로그인하지 않으면 send()가 실행되고 renderEntries()없이 응답이 수행됩니다. 그러나 renderEntries는 사용자가 로그인하면 실행되지 않으며 res.send()는 실행되지 않습니다. –

+0

두 함수는 모두 실행되지만 게시물은 –

답변

2

이것은 자바에서 콜백이 작동하는 방식 때문입니다. 중요한 부분은 다음과 같습니다.

app.post('/guestbook_post', urlencodedparser, function(req, res){ 
    makeEntry(req, res, Guestbook); 
    renderEntries(res, Guestbook); 
    }); 

두 기능에 모두 res을 전달합니다. 그러나 makeEntryres.send()을 호출합니다. 이는 요청을 끝내고 응답을 클라이언트에 다시 보냅니다. 그러나 renderEntries은 아직 실행되지 않았지만 여전히 이벤트 루프에서 대기 중입니다. 다음에 요청을 게시하면 실행될 것이므로 매우 혼란스럽고 버그가있는 행동으로 이어질 것입니다.

반환 필요한 결과 객체로, 리팩토링 기능 makeEntryrenderEntries을 intendeed로 작동 한 번 클라이언트에 렌더링 확인하십시오. 다음과 같이 입력하십시오 :

app.post('/guestbook_post', urlencodedparser, function(req, res){ 
    makeEntry(req, Guestbook, (err, entry) => { 
     renderEntries(entry, Guestbook, (err, result) => { 
      res.send(result); 
     }); 
    }); 
    }); 
+0

Thx이지만 사용자가 로그인하면 res.send()가 실행되지 않습니다. –

+0

별도로 제기 할 수있는 또 다른 질문입니다. "하나의 기능 만 실행되었습니다"라는 문제를 해결하면이 질문을 "수락 됨"으로 표시하십시오. –

관련 문제