JavaScript / / 2021. 2. 2. 23:50

Promise

Promise 는 비동기 작업의 최종 완료, 실패를 나타내는 객체이다.

Promise 는 함수에 콜백을 전달하는 대신에, 콜백을 첨부하는 방식의 개체이다.

Promise 를 사용하면 비동기 메서드에서 동기 메서드처럼 값을 반환할 수 있다. 하지만 최종결과를 반환하는 것 아니라 프로미스를 반환해 미래 어느시점에 결과를 제공한다.

 

- 대기(pending) : 초기 상태

- 이행(fulfilled) : 연산이 성공적으로 완료됨

- 거부(rejection) : 연산이 실패함

의 상태를 가진다.

 

메서드

 

Promise.all(iterable)

iterable 내의 모든 프로미스가 이행한 뒤 이행한다. 어떤 프로미스가 거부하면 즉시 거부하는 프로미스를 반환한다.

모든 프로미스가 이행되거나, 하나라도 거부되면 프로미스 객체 반환한다.

 

Promise.allSettled()

모든 프로미스가 이행되거나, 거부했을 때에 프로미스 객체 반환한다.

프로미스들 중 하나가 reject 이더라도 다른 프로미스들의 결과를 받을수 있다.

 

Promise.race(iterable)

iterable 내의 어떤 프로미스가 이행하거나 거부하는 즉시 해당하는 프로미스를 반환한다.

가장 먼저 settled된 프로미스를 잡아낼 때 사용한다.

 

Promise.any()

race는 reject, fulfilled 둘다 취급하지만, any()는 fulfilled만을 취급한다.

 

Promise.reject()

주어진 이유로 거부하는 프로미스 객체를 반환한다.

 

Promise.resolve()

주어진 값으로 이행하는 프로미스 객체를 반환한다. 반환된 프로미스는 then 메서드를 따라간다. 그렇지 않은 경우 반환된 프로미스는 주어진 값으로 이행한다. 

 

 

Promise 프로토타입

 

Promise.prototype.constructor

인스턴스의 프로토타입을 만드는 함수를 반환한다. 기본값은 Promise함수이다.

 

 

메서드

Promise.prototype.catch()

프로미스에 거부처리기 콜백을 추가한다. 호출된 경우는 콜백의 반환값을, 프로미스가 대신 이행된 경우는 그 원래 이행값으로 결정하는 프로미스를 반환한다.

 

Promise.prototype.then()

프로미스에 이행 또는 거부 처리기를 추가하고, 호출된 처리기의 반환값을, 처리되지 않은 경우는 그 원래 settled된 값으로 결정하는 새 프로미스 반환한다.

 

Promise.ptototype.finally()

프로미스에 처리기를 추가한다. 그 원래의 프로미스가 결정되었을 때에 결정된 새 프로미스를 반환한다. 처리기는 프로미스가 처리되거나, fulfilled 또는 rejected 되던간에 호출된다.

 

 

Promise 는 다음의 장점들이 있다.

 - 콜백은  자바스크립트 Event Loop이 현재 실행중인 콜 스택을 완료하기 이전에는절대 호출되지 않는다.

 - 비동기 작업이 성공하거나 실패한 뒤에 then()을 이용하여 추가한 콜백의 경우에도 위와 같다.

 - then()을 여러번 사용하여 여러개의 콜백을 추가 할 수 있다.그리고 각각의 콜백은 주어진 순서대로 하나 하나 실행되게 된다.

 

Promise의 가장 뛰어난 장점 중의 하나는 Chaining 이다.

 

 

Chaining

 

순차적으로 각각의 작업이 이전 단계 비동기 작업이 성공하고 나서 그 결과값을 이용하여 다음 비동기 작업을 실행해야 하는 경우에 Promise Chain 을 이용한다.

 

const promise2 = doSomething().then(successCallback, failureCallback);

promise2 는 doSomething() 뿐만 아니라, sucessCallback, failureCallback 의 완료를 의미한다.

 

Chain에서 작업이 실패한 후에도 새로운 작업을 수행하는 것이 가능

 

new Promise((resolve, reject) => {
    console.log('Initial');

    resolve();
})
.then(() => {
    throw new Error('Something failed');

    console.log('Do this');
})
.catch(() => {
    console.log('Do that');
})
.then(() => {
    console.log('Do this, whatever happened before');
});

결과 : 

 

Initial
Do that
Do this, whatever happened before

 

new Error 가 rejection을 발생 시킴.

 

 

 

 

 

 

 

promise 사용법 promise 설명

'JavaScript' 카테고리의 다른 글

  (0) 2021.12.20
배열 내장함수[splice - slice]  (0) 2021.02.13
배열 내장함수 [forEach]  (0) 2021.02.09
백틱(` `)  (0) 2021.01.19
자바스크립트 for in 문, for of 문  (0) 2021.01.12
  • 네이버 블로그 공유
  • 네이버 밴드 공유
  • 페이스북 공유
  • 카카오스토리 공유