[Node.js] #2 Callback함수와 Promise 그리고 async/await

✨New Wisdom✨·2020년 7월 26일
0

📗 Nodejs 📗

목록 보기
3/20
post-custom-banner

Callback 함수

callback 함수란

어떤 작업을 다른 객체에게 맡겨놓고, 그 일이 끝나기를 기다리고 있지 않고 내 할 일을 하다가 다른 객체가 작업을 마치면 call back!
non-block(IO작업이 진행되는 동안 작업이 멈추지 않고 다음 작업 수행)이며,
비동기 방식(요청을 하고 바로 제어권을 돌려받는 방식)의 함수인 것이다.

예제

sum = function(a, b, callback){
    let result = a + b;
    callback(result);
}
sum(1, 2, funtion(res){
    console.log(res);
}

sum 함수는 1, 2를 전달받고 result에 1 + 2 값을 넣는다.
그러고 callback 으로 받음 함수에 첫번째 변수로 result를 넣어 실행한다.

callback Hell

비동기로 처리하기 위해 callback 안에 callback 다시 callback….
이 문제를 해결하기 위해 Promise 또는 async/await를 사용할 수 있다!


Promise

ES6부터 등장한 흐름제어 패턴으로 내부적인 예외 처리 구조 기능을 가진다.

Promise 생성

new Promise((resolve, reject) => {
    //
});
  • resolve : 성공 메세지
  • reject : 실패 메세지

예제

const plus = new Promise((resolve, reject) => {
    const a = 1;
    const b = 2;
    if(a + b > 2){
        resolve (a + b); // 성공
    }else{
        reject(a + b);
    }
});
plus
    .then((sucess) => {
 
    })
    .catch((fail) => {
 
    })

resolve(성공) 시에는 then, reject(실패) 시에는 catch가 실행된다.

  • Promise를 지원하는 메서드라면 내부적으로 지원해주기 때문에
    then과 catch 사용이 가능하다!
  • then에 return 값이 있으면 다음 then으로 넘어가고,
    Promise를 리턴하면 resolve나 reject되어 넘어간다.

Promise 성공, 실패 축약

const successPromise = Promise.resolve('success'); // 무조건 성공하는 Promise
const failurePromise = Promise.reject('failure'); // 무조건 실패하는 Promise

Promise.all

Promise.all로 여러개의 프로미스를 동시에 실행 가능하다.
하지만 이 중 하나라도 실패하면 catch.
callback에서는 불가능 하다.

Promise.all([Users.findOne(), Users.remove(), Users.update()])
    .then((result) => {})
    .catch((error) => {})

async/await

ES7부터 등장한 자바스크립트의 비동기 패턴으로 Promise 코드를 일자로 폈다고 생각하면 편하다! 비동기 코드의 겉모습과 동작을 좀 더 동기 코드와 유사하게 만들어 준다.

에러 처리를 위해 await를 try catch 문으로 감싼다.

await는 async함수 안에서만 사용 가능

promise를 일자로 폈다고 생각해라

예제

async func() => {
  let user = await Users.findOne('Shin');
}
  • await는 async 안에서만 사용이 가능하다.
  • async 함수는 Promise를 리턴한다.
  • 에러 처리는 try / catch 문으로 해결한다.

🚚원글 (Jul 13 · 4 min) 글 이사🚚
origin : https://medium.com/developer-new-wisdom/node-js-2-callback%ED%95%A8%EC%88%98%EC%99%80-promise-%EA%B7%B8%EB%A6%AC%EA%B3%A0-async-await-5fa900e16c7b

profile
🚛 블로그 이사합니다 https://newwisdom.tistory.com/
post-custom-banner

0개의 댓글