Promise

Jay·2020년 12월 21일
0

Promise

:비동기 연산이 종료된 이후의 결과값이나 실패 이유를 처리하기 위한 처리기를 연결할 수 있도록 한다.
(최종 결과 반환 x, 프로미스를 반환해서 미래 어떤 시점에 결과를 제공한다)


promise 메서드

promise.all()

Promise.all(iterable)
: 메서드는 순회 가능한 객체에 주어진 모든 프로미스가 이행한 후, 혹은 프로미스가 주어지지 않았을 때 이행하는 Promise를 반환한다.

주어진 프로미스 중 하나가 거부하는 경우, 첫 번째로 거절한 프로미스의 이유를 사용해 자신도 거부한다.

let p1 = Promise.resolve(3);
let p2 = 1337;
let p3 = new Promise((resolve, reject) => {
  setTimeout(() => {
    resolve("foo");
  }, 100);
});

Promise.all([p1, p2, p3]).then(values => {
  console.log(values); // [3, 1337, "foo"]
});

promise.race()

Promise.race(iterable)
: Promise 객체를 반환한다. 이 프로미스 객체는 iterable 안에 있는 프로미스 중에 가장 먼저 완료된 것의 결과값으로 그대로 이행하거나 거부한다.

const promise1 = new Promise((resolve, reject) => {
  setTimeout(resolve, 500, 'one');
});

const promise2 = new Promise((resolve, reject) => {
  setTimeout(resolve, 100, 'two');
});

Promise.race([promise1, promise2]).then((value) => {
  console.log(value);
  // 둘다 resolve지만 promise 2가 더 빠르다.
});
// output: "two"

Promise.reject()

Promise.reject(reason)
:주어진 이유(reason)로 거부된 Promise 객체를 반환한다.

Promise.reject("Testing static reject").then(function(reason) {
  // 호출되지 않음
}, function(reason) {
  console.log(reason); // "Testing static reject"
});

Promise.reject(new Error("fail")).then(function(error) {
  // 호출되지 않음
}, function(error) {
  console.log(error); // Stacktrace
});

Promise.resolve(value)

Promise.resolve(value)
: 주어진 값으로 이행하는 Promise.then 객체를 반환한다.

const promise1 = Promise.resolve(123);

promise1.then((value) => {
  console.log(value);
  //  output: 123
});

promise의 상태

- pending (대기)

: 이행하거나 거부되지 않은 초기 상태

- fulfilled (이행)

: 연산이 성공적으로 완료됨

- rejected (거부)

: 연산이 실패함


new Promise의 인스턴스 메서드

Promise.prototype.catch()

: 프로미스(promise)에 거부 처리기 콜백을 추가하고 호출된 경우 콜백의 반환값 또는 프로미스가 대신 이행된 경우 그 원래 이행(fulfillment)값으로 결정하는(resolving) 새 프로미스를 반환.

Promise.prototype.then()

: 프로미스에 이행 또는 거부 처리기를 추가하고 호출된 처리기의 반환값 또는 프로미스가 처리되지 않은 경우 그 원래 처리된(settled) 값으로 결정하는 새 프로미스를 반환 (즉 관련 처리기 onFulfilled 또는 onRejected가 undefined인 경우)

Promise.prototype.finally()

: 프로미스 거절, 이행 여부와 관계 없이 프로미스가 끝나면 호출된다.


mdn Promise : https://developer.mozilla.org/ko/docs/Web/JavaScript/Reference/Global_Objects/Promise

next: async & await

async & await

async와 await는 자바스크립트의 비동기 처리 패턴 중 가장 최근에 나온 문법. 기존의 비동기 처리 방식인 콜백 함수와 프로미스의 단점을 보완하고 개발자가 읽기 좋은 코드를 작성할 수 있게 도와준다.

profile
programming!

0개의 댓글