아하
검색 이미지
생활꿀팁 이미지
생활꿀팁생활
생활꿀팁 이미지
생활꿀팁생활
갸름한발발이266
갸름한발발이26619.06.05

node 동기 비동기 처리 도와주세요 ㅠㅠ

router.get("/test3", function(req, res, next){

const tt = findOneEmail();

console.log("55555555555555")

res.send("+++" + tt);

})


const findOneEmail = () =>

{ let a, b; models.member.findOne

({ where: { mem_email: "email@naver.com" } })

.then(result =>

{

a = result.mem_email+"----6666"

b = "1111" console.log(a + "333");

console.log(b + "4444444444"); return "ㅁ" + a; })

.catch(err =>{ //return err; })

console.log(a + "/////////////1111")

console.log(b + "222222"); }

지금 1, 2, 5, 63, 14 순서로 출력됩니다 ㅠㅠ

return 으로 result값 받아서 router에서 출력할수 있는 방법 없을까요??

55글자 더 채워주세요.
답변의 개수
1개의 답변이 있어요!
  • 일단 javascript의 Promise라는 개념을 공부하시면 좋을 것 같습니다.


    저기서 코드가 실행되는 순서가 순차적으로 되지 않는 이유는 models.member.findOne() 이 부분인데요, 저 findOne 부분이 Promise를 return 한다는 사실을 먼저 아셔야됩니다.

    그리고 직접 만드신 findOneEmail() 함수가 Promise를 return 하도록 만드는게 관건이겠네요.

    Arrow Function을 사용하셨으니까 ES6 문법인 async & await로 설명드리고 약간의 코드 수정을 도와드리겠습니다.

    const findOneByEmail = (email) => { return models.member.findOne({ where: { mem_email: email } }) } router.get("/test3", async (req, res, next) => { try { const tt = await findOneByEmail("email@naver.com") return res.json(tt) } catch (err) { console.error(err) next(err) } })