코딩/Today I Learn

11/29 공부

코딩쪼렙 2021. 11. 29. 15:25
728x90

Callback 함수 이용

 

export const home = (req, res) => {
  Video.find({}, (error, videos) => {
    console.log("error", error);
    console.log("videos", videos);
  });
  console.log('hello');
  return res.render("home", { pageTitle: "home", videos: [] });
};

 

-->

request page 

cosole.log --> hello가 //제일 먼저 호출됨

render --> response looger( template ),

 call back  --> error ,videos순 callback은 특정코드를 마지막에 실행하게해줌 

 

search가 끝난 후 render하기위해 기다림 

장점: 추가적인 코드 없이 에러를 볼 수 있음

단점:함수안에 함수를 써야하는 번거러움이있음

 

에러코드 사용

export const home = (req, res) => {
  Video.find({}, (error, videos) => {

     if(error){

       return res.render("server-error")

     }
     return res.render("home", {pageTitle:"home", videos})
  });

---------------------------------------------------------------------------

Promise 함수 이용  최신버전 

export const home = async (req, res) => {
  console.log("i start")
  const videos = await Video.find({});
  console.log("i finished")
  console.log(videos)
  return res.render("home", { pageTitle: "Home", videos })
};

 

순서대로 

i start

i finished

[]

render --> response looger( template ) 실행됨 

 

await 을 find 앞에 쓰면 find는 callback필요없고(기다려서 작동하지않음) videos 찾아줌  

에러는? --> try/catch문 이용 

export const home = async (req, res) => {
  try{
    console.log("i start")
    const videos = await Video.find({});  ///////////여기서 기다려 
    console.log("i finished")
    console.log(videos)
    return res.render("home", { pageTitle: "Home", videos })
  }catch(error){
    return res.render("server-error", {error});
  }
};

await이 async(비동기) 인 함수 안에만 적용된다.
장점: 직관적임 callback함수와달리 어디를 기다리는지 직관적으로 알 수있음

 

1. return의 역할 : 본질적인 return의 역할보다는 function을 마무리짓는 역할로 사용되고 있음.
- 이러한 경우 return이 없어도 정상적으로 동작하지만 실수를 방지하기 위해 return을 사용
2. render한 것은 다시 render할 수 없음
- redirect(), sendStatus(), end() 등등 포함 (express에서 오류 발생)