본문 바로가기

Dev/Web

[JS] Promise

📁 Promise 란

  • 비동기 작업을 더 편하게 처리할 수 있는 기능
  • 어떤 작업의 중간 상태를 나타내는 오브젝트 (어떤 종류의 결과가 반환됨을 promise)
  • Promise 객체는 비동기 작업이 맞이할 미래의 완료/실패/결과 값을 나타냄
  • new 키워드를 통해 객체 생성 → 변수 등에 할당해 활용 가능
  • 하나의 콜백함수를 인자로 받음
  • 반드시 3가지 상태 중 하나를 가짐
    • 대기(pending): 초기 상태, 결과 값 반환X 
    • 이행(fullfilled): 연산이 성공적으로 완료된 상태
    • 거부(rejected): 연산이 실패한 상태
  • 이행/거부 상태를 가지면 더 이상 상태 변경 불가
  • finally method: 프로미스의 성공/실패에 관계없이 처리만 되면 실행되는 함수 → 성공/실패 여부 모름
  • 결과 값은 내부 객체이므로 then/catch로 접근 가능

 

📁 Promise 사용 이유

callback 함수로 비동기 작업 처리 시 코드의 깊이가 깊어짐

Promise 사용 시 코드의 깊이가 깊어지는 현상 방지 가능

 

📁 resolve, reject

    • Promise 성공 시 resolve 호출, 실패 시 reject 호출
    • resolve
      • 호출 시 특정 값을 파라미터로 넣어주면, 해당 값을 작업이 끝난 뒤 사용 가능
      • 작업이 끝난 뒤 다른 작업을 해야 할 경우 .then(...)을 붙여 사용
    • reject
      • 호출 시 특정 값을 파라미터로 넣어주면, 해당 값을 작업이 끝난 뒤 사용 가능 (.catch)
      • 실패한 이유(실패 처리의 결과 값)가 담김
    • then
      • 프로미스가 이행되었을 때 실행되는 함수
      • 통상적으로 then 메소드는 인수에 하나만 전달하여, 이행된 경우에만 다루고 실패했을 경우 catch 메소드를 사용해 제어
    • catch
      • 프로미스가 거부되었을 때 실행되는 함수

 

📁 Promise Chaining

then 메소드와 catch 메소드의 반환값은 또 다른 프로미스 객체를 반환해 서로 chaining 가능

catch 메소드는 상위에 체이닝되어 있는 어떤 함수에서 에러가 나더라도 에러 핸들링 가능

 

📁 Promise 단점

  • 에러 발생 시 위치를 찾기 어려움
  • 특정 조건에 따라 분기를 나누기 어려움
  • 특정 값을 공유하며 작업을 처리하기 어려움

'Dev > Web' 카테고리의 다른 글

[React] JSX  (0) 2023.11.11
[JS] async, await  (0) 2023.11.10
[JS] 비동기  (0) 2023.11.10
[JS] ES6  (0) 2023.11.09
[JS] 변수  (0) 2023.11.09