Promise

yoo chang heon·2022년 4월 6일
0

JavaScript

목록 보기
5/9

콜백함수란?

콜백함수는 다른 함수에 매개변수로 넘겨준 함수이다. 매개변수로 넘겨받은 함수는 일단 넘겨받고, 떄가 되면 나중에 call back 한다.
쉽게 말해 다른 함수가 실행을 끝낸 뒤 실행되는 함수이다.

Promsie

비동기 작업이 맞이할 미래의 완료 또는 실패와 그 결과 값을 나타낸다.
promise는 비동기 작업의 최종 완료 또는 실패를 나타내는 객체이다. 기본적으로 함수에 콜백을 전달하는 대신에 콜백을 첨부하는 방식의 객체이다.

장점

  • 콜백은 자바스크립트 Event Loop이 현재 실행중인 콜 스택을 완료하기 이전에는 절대 호출되지 않는다.
  • 비동기 작업이 성공하거나 실패 한 뒤에 then()을 이용하여 추가된 콜백의 경우에도 마찬가지이다.
  • then()을 여러번 사용하여 여러개의 콜백을 추가할 수 있다. 각각의 콜백은 주어진 순서대로 하나 하나 실행되게 된다.

가장 큰 장점 => Chaining

Chaining

여러개의 비동기 작업을 순차적으로 실행해야 하는 상황에서 (하나의 결과로 다음 비동기 작업 실행) promise chain으로 해결한다.

각각의 primise는 체인 안에서 서로 다른 비동기 단계의 완료를 나타낸다.

고전적으로 여러 비동기 작업을 연속적으로 수행하면 다음같은 콜백 피라미드가 만들어졌다.

doSomething(function(result) {
  doSomethingElse(result, function(newResult) {
    doThirdThing(newResult, function(finalResult) {
      console.log('Got the final result: ' + finalResult);
    }, failureCallback);
  }, failureCallback);
}, failureCallback);

이를 promise 체인으로 쉽게 구현할 수 있다.

doSomething().then(function(result) {
  return doSomethingElse(result);
})
.then(function(newResult) {
  return doThirdThing(newResult);
})
.then(function(finalResult) {
  console.log('Got the final result: ' + finalResult);
})
.catch(failureCallback);

내장함수

  • all: 순회 가능한 객체(배열)에 주어진 모든 promise가 이행, 혹은 promise가 주어지지 않았을 때 이행하는 promise를 반환(race와 비슷하지만 any는 하나라도 정상적으로 resolve되면 종료)
  • any: iterable한 객체에서 iterable의 promise가 하나라도 해결되는 순간 나머지를 다 끝냄.
  • catch: promise를 반환하고 거부된 경우만 처리
  • race: 한개만 끝나도 다 끝냄.(실패하던말던 신경 안씀)
  • reject: 주어진 이유(reason)로 거부된 promise 객체를 반환합니다.
  • resolve: 주어진 값으로 이행하는 promis.then객체 반환
  • then: promise를 리턴하고 두개의 콜백함수를 인수로 받는다.(promise가 이행했을 때, 거부했을 때를 위한 콜백함수)

resolve, reject

내부에서 비동기 상황이 종료되었을때 resolve함수를 호출한다.(작업이 끝날 때)
내부에서 오류상황이 일어났을 때 reject함수를 호출한다.
.then()을 이용해 비동기 작업 이후 실행할 작업을 작성한다.

catch

chain에서 작업이 실패한 후에도 새로운 작업을 수행하는 것이 가능하다.
chain중에서 실패시 catch로 잡을 수 있다.

0개의 댓글