갈푸라떼
갈푸라떼는 개발중
갈푸라떼
전체 방문자
오늘
어제
  • 분류 전체보기 (232)
    • CS (0)
      • CSinfo (0)
    • Frontend (15)
      • HTML,CSS (1)
      • Javascript (2)
      • React (0)
      • React Hook (12)
    • Backend (0)
      • Python (0)
      • Node.js (0)
      • php (0)
    • DB (2)
      • MySQL (2)
      • BigQuery (0)
      • Mongodb (0)
    • Study (186)
      • JavaScript (72)
      • JavaScript(Clean code) (50)
      • Node.js (11)
      • HTML,CSS (13)
      • React (30)
      • TypeScript (10)
      • React-Native (0)
    • Error (2)
      • error (2)
    • Git (22)
      • Git (22)
    • Help Coding (4)
      • Useful websites (3)

블로그 메뉴

  • 홈
  • 태그
  • 방명록
  • Github

공지사항

인기 글

태그

  • symbol
  • Babel
  • 정적 레벨
  • 함수
  • this
  • structure
  • 네이밍
  • 스코프 체인
  • 상속
  • 렉시컬 환경
  • prototype
  • 싱글스레드
  • 실행 컨텍스트
  • 호이스팅
  • 오버라이딩
  • function
  • 심볼
  • 객체타입
  • ECMAScript
  • 인터프리터
  • PM2
  • 자바스크립트엔진
  • Arrow
  • class
  • SPREAD
  • 원시타입
  • 프로토타입
  • 이터러블
  • 컴파일러
  • nodemon

최근 댓글

최근 글

티스토리

hELLO · Designed By 정상우.
갈푸라떼

갈푸라떼는 개발중

Study/JavaScript

[JavaScript_study] 프로미스(Promise)

2022. 4. 13. 00:57

* callback를 대체할 수 있는 Promise

  • 무겁고, 오래걸리는 일이 있다면 우리코드 내부에서 조금 더 비동기적으로 처리할 수 있게 도와준다.
  • 일이 끝나면 수행하줄게!! then(일이 끝난뒤 등록) // catch(에러발생) // finally(최종적으로 모든일이 끝났을때)
  • Promise를 쓰게되면 resolve, reject라는 파라미터를 받아온다.
    • 성공 : resolve, 실패 : reject
// Promise를 쓰게되면 resolve, reject라는 파라미터를 받아온다.
// 성공 : resolve, 실패 : reject
// 함수에 대해 필요한 요소만 전달한다.
function runInDelay(seconds) {
  return new Promise((resolve, reject) => {
    if (!seconds || seconds < 0) {
      reject(new Error('seconds가 0보다 작음'));
    }
    setTimeout(resolve, seconds * 1000);
  });
}

// promise를 chaining해서 사용할 수 있다.
runInDelay(2)
  .then(() => console.log('타이머 완료!'))
  // 전달되는 인자와 호출하는 인자가 같으므로 생략가능
  // 원래는 .catch( error => console.error(error))
  // Promise에서 error이 발생했는데 catch로 처리를 해주지 않으면 UnhandledPromiseRejectionWarning에러가 발생한다.
  .catch(console.error)
  .finally(() => console.log('끝났다!'));

 

* Promise chaning 예시 코드

// new Promise를 통해 만드는게 아닌
// 조금 더 심플하게 Static함수를 이용해서 resolve를 호출한다.
// promise를 chaining해서 사용할 수 있다.

function fetchEgg(chicken) {
  return Promise.resolve(`${chicken} => 댤걀`);
}

// fetchEgg("닭").then((egg)=> console.log(egg))

function fryEgg(egg) {
  return Promise.resolve(`${egg} => 계란후라이`);
}

function getChicken() {
  return Promise.reject(new Error('치킨을 가지고 올 수 없음!'));
  // return Promise.resolve(`사육 => 닭`);
}

getChicken()
/**
`사육 => 닭`을 chicken이라는 parameter에 담아서  {return fetchEgg(chicken)} 해당 함수에 전달
fetchEgg함수에 chicken parameter값인 `사육 => 닭`이 들어가서 `사육 => 닭 => 달걀`이 된다.
`사육 => 닭 => 달걀` egg에 전달되고 fryEgg함수 파라미터안에 값이 들어가게된다.
fryEgg 함수에서 return값으로 `사육 => 닭 => 달걀 => 계란후라이`를 반환해준다.
반환된값을 friedEgg안에 넣어준뒤 console창에 띄어준다.
*/

.then(chicken => {return fetchEgg(chicken)})
.then(egg => fryEgg(egg))
.then(friedEgg => console.log(friedEgg))
// 만약 getChicken과정에서 error이 발생한 경우
.catch(error => console.log(error.name))


// 만약 getChicken과정에서 error이 발생한 경우
// catch를 이용해서 error대신에 대체값을 입력하여 유연하게 다른값을 return해주어 error를 유연하게 컨트롤 해준다.
// 전달하는 인자와 호출하는 인자가 같으면 아래와 같이 (함수의 이름만 참조값으로 작성)생략이 가능하다.
getChicken()
  // error를 출력할 필요없이 기본값을 바로 return해주는 경우 아래와 같이 생략이 가능하다.
  .catch(() => '닭')
  .then(fetchEgg)
  .then(fryEgg)
  .then(console.log);

'Study > JavaScript' 카테고리의 다른 글

[JavaScript_study] async/await  (0) 2022.04.13
[JavaScript_study] Promise static method  (0) 2022.04.13
[JavaScript_study] 자바스크립트의 작동 원리  (0) 2022.04.13
[JavaScript_study] 모듈 (module)  (0) 2022.04.12
[JavaScript_study] error-bubbling  (0) 2022.04.12
    'Study/JavaScript' 카테고리의 다른 글
    • [JavaScript_study] async/await
    • [JavaScript_study] Promise static method
    • [JavaScript_study] 자바스크립트의 작동 원리
    • [JavaScript_study] 모듈 (module)
    갈푸라떼
    갈푸라떼

    티스토리툴바