Ryu.log

[ NodeJS 06 ] 프로미스(Promise) API 본문

Prev-content

[ NodeJS 06 ] 프로미스(Promise) API

류뚝딱 2018. 7. 26. 11:11



01. Promise API

Promise의 API들에 대해 알아보자, 먼저 첫번째로 아래 코드를 보면
const handleMessage = (message) => {
  return new Promise((resolve, reject) => {
    resolve(message);    
  });
}

const handleMessage2 = (message2) => {
  console.log(message2);
  return new Promise((resolve, reject) => {
    resolve(message2);
  })
}

promise
  .then(handleMessage)
  .then(handleMessage2)
  .then((message3) => {
    console.log(message3);
  })
  .catch((error) => {
    console.error(error);
  })

이전에 콜백 방식때 콜백 지옥을 벗어나기 위해서, 개량된 방식비슷하게 위 같은 방식으로 Promise를 사용 할 수도있다.

하지만 Promise자체적으로 가독성이 나쁘지않기 때문에 필수는 아니고, 이런 방법도 있다 정도로 알자.


두번째는 무조건 성공하거나 무조건 실패하는 Promise의 라인수를 줄이는 방법이다. 아래코드를 보자.

const promise = new Promise((res, rej) => {
  rej('실패');
});
// 기존에 이런식으로 무조건 성공 or  실패하는 Promise 라면 아래와 같이 코드를 바꿀 수 있다.
const successPromise = Promise.resolve('성공');
const failurePromise = Promise.reject('실패');

마지막으로 Promise.all이라는게 있다. 아래 코드를 보자.

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

이런식으로 만들었던 Promise함수들을 한곳에 배열로 담은 뒤,

한방에 then이나 catch를 실행할 수 있다.

각각의 결과는 then(result)result 값에 배열로 담긴다.


Promise.all은 여러 Promise를 동시에 실행 가능하지만,

만약 하나라도 실패하면 곧장 catch로 빠져버리는 단점이 있다.


만약 Promise를 여러개 동시에 사용 하고싶고, 결과값이 전부 성공한다고 친다면

Promise.all을 사용 하면 된다.



02. Promise 정리

지금까지 Promise에 대해 알아보았는데 Promise를 한문장으로 표현하자면

결과값을 가지고 있지만 .then이나 .catch를 붙히기 전까지는 반환하지 않는 것이다.


기존 콜백 방식과 비교를 한번해서, 간단히 코드로 설명을 해보자!

//기존 콜백방식은 로직내에서 결과값을 출력 해주어야 한다.
User.findOne('juno', (err, user) => {
  console.log(user);
});

//--------------------------------------------------------------------------------------

// Promise는 선언해놓고 변수에 담아놓으면 다른 로직을 실컫 실행한 뒤에도 담긴 변수만 호출해서 사용이가능하다.
const juno = Users.findeOne('juho');

// 다른로직
// 다른로직
// ...쭈욱

juno.then((user) => {
  console.log(user);
});

Promise는 이런식으로 개발자들이 개발을 함에 있어 조금 더 자유도를 주고,

가독성을 뛰어나게하여 비동기형식의 개발을 조금더 쉽고 직관적으로 도와준다.

Comments