고슴맨쉬
망치와 공(空)
고슴맨쉬
  • 분류 전체보기 (155)
    • 💡 UXUI (4)
      • UXUI (2)
      • UI (2)
      • UX (0)
    • 🟨 JavaScript (66)
      • 개념 (42)
      • 정리 (2)
      • 문제풀기 (프로그래머스, 코딩애플) (15)
      • 응용하여 자동화or문제해결하기 (2)
      • 기타 (5)
    • ⚛️ React (49)
      • 개념 (27)
      • 개념(Redux) (3)
      • 정리 (4)
      • 문제풀기 (코딩애플: React) (15)
    • 📘 TypeScript (10)
      • 개념 (8)
      • 문제풀기 (코딩애플) (2)
    • 🌐 HTML,CSS (18)
      • 실무에서 자주 발생한 오류들 (10)
      • 뒤늦게 알아서 뼈아픈 유용한 CSS (6)
      • 기타 자주 쓰는 CSS (2)
    • 💻 CS (8)
      • CS (5)
      • 정규표현식 (2)
      • Git,Github (1)

태그

  • json
  • 오류
  • object
  • redux
  • CSS
  • useEffect
  • CS
  • Ajax
  • array
  • react
  • 프로그래머스
  • JavaScript
  • UXUI
  • Props
  • state
  • 코딩애플
  • TypeScript
  • 삼항연산자
  • axios
  • class
전체 방문자
오늘
어제
hELLO · Designed By 정상우.
고슴맨쉬

망치와 공(空)

🟨 JavaScript/개념

[드림코딩] 콜백함수 (2) : 콜백지옥 탈출, Promise (State, Producing)

2022. 7. 22. 15:16

Promise

Promise는 javascript에 내장되어있는 object로, 이를 통해서 비동기 코드를 깔끔하게 작성할 수 있다.

  • 네트워크통신을 한다던지, 파일을 읽어온다던지 하는 등의 무거운 작업을 할 때는 오래 걸리므로 Promise로 처리한다. 무거운 작업을 처리하므로 사용자가 요청하지 않았는데도 일어나는 불필요한 네트워크통신(promise함수의 실행)을 방지해야 한다.
  • new Promise가 만들어지는 순간, 해당 executor 함수가 자동으로 실행되므로 주의하자.

promise는 아래 두 가지를 염두에 두면 좋다.


1. State(상태)

process가 무거운 operation을 수행하고 있는지/완료되었다면 성공했는지/실패했는지의 상태

  • pending : operation을 수행 중인 상태
  • fulfilled : operation을 성공적으로 수행한 상태
  • rejected : 파일을 찾을 수 없거나, 네트워크에 문제가 생긴 등 실패한 상태

2. Producing

Producer(데이터를 제공하는 사람)와 Consumer(데이터를 소비 하는 사람)의 차이

Producer

- resolve

const promise = new Promise((resolve, reject) => {
  //doing some heavy work (network, read files)
  console.log('doing something...');
  setTimeout(() => {
    resolve('Noran');
  }, 2000);
})

- reject

const promise = new Promise((resolve, reject) => {
  //doing some heavy work (network, read files)
  console.log('doing something...');
  setTimeout(() => {
    reject(new Error('no network'));
  }, 2000);
})

Consumer

- then

// 정상적으로 수행이 된다면
promise.then((value) => { //value는 위의 promise함수에서 resolve된 data
  console.log(value);
})

//"Noran"

- catch 추가

// 정상적으로 수행이 된다면
promise
  .then(value => { //value는 위의 promise함수에서 resolve된 data
  console.log(value);
}) //then은 똑같은 promise를 return한다.
// reject되어 error가 일어난다면
  .catch(error => { //error를 uncaught가 아닌 원하는 방식으로 뜰 수 있게
  console.log(error);
});

//Error: no network

- finally 추가

// 정상적으로 수행이 된다면
promise
  .then(value => { //value는 위의 promise함수에서 resolve된 data
  console.log(value);
}) //then은 똑같은 promise를 return한다.
// error가 뜬다면
  .catch(error => { //error를 uncaught가 아닌 원하는 방식으로 뜰 수 있게
  console.log(error);
})
// 결과가 어떻든 마지막에 실행된다
.finally(() => {
  console.log('어쨌든 실행됨');
});

//Error: no network
//'어쩄든 실행됨'

출처 : 드림코딩 https://www.youtube.com/@dream-coding / MDN https://developer.mozilla.org/ko/

저작자표시 비영리 동일조건 (새창열림)

'🟨 JavaScript > 개념' 카테고리의 다른 글

[드림코딩] 콜백함수 (4) : 콜백지옥 탈출, Promise (callback hell 코드개선하기)  (0) 2022.10.04
[드림코딩] 콜백함수 (3) : promise로 Error Handling하기 (reject, catch 활용)  (0) 2022.10.04
[드림코딩] 콜백함수 (1) : 콜백지옥 예시  (0) 2022.07.22
[mdn, 드림코딩, 코딩애플] 콜백함수 (1) : 동기와 비동기 개념  (0) 2022.07.12
[드림코딩] JSON to Object (parse)  (0) 2022.07.12
    '🟨 JavaScript/개념' 카테고리의 다른 글
    • [드림코딩] 콜백함수 (4) : 콜백지옥 탈출, Promise (callback hell 코드개선하기)
    • [드림코딩] 콜백함수 (3) : promise로 Error Handling하기 (reject, catch 활용)
    • [드림코딩] 콜백함수 (1) : 콜백지옥 예시
    • [mdn, 드림코딩, 코딩애플] 콜백함수 (1) : 동기와 비동기 개념
    고슴맨쉬
    고슴맨쉬
    부수되 집착하지 않고, 이해하되 머무르지 않기

    티스토리툴바