Promise.resolve()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Promise.resolve(value) 메서드는 주어진 값으로 이행하는 Promise.then 객체를 반환합니다. 그 값이 프로미스인 경우, 해당 프로미스가 반환됩니다. 그 값이 thenable(예, "then" 메소드 가 있음)인 경우, 반환된 프로미스는 그 thenable을 "따르며", 그 최종 상태를 취합니다. 그렇지 않으면 반환된 프로미스는 그 값으로 이행합니다. 이 함수는 프로미스형의 객체(무언가를 결정하는 프로미스를 결정하는 프로미스 등)의 중첩된 레이어를 단일 레이어로 펼칩니다.

경고: 주의: 스스로를 결정하는 thenable 에서 Promise.resolve 를 호출하면 안됩니다. 이는 무한히 중첩된 프로미스를 펼치려고하므로 무한 재귀를 유발할 것입니다. Angular 에서 async Pipe 를 함께 사용한 예제입니다. 자세한 내용은 여기에서 확인하세요.

시도해보기

구문

js
Promise.resolve(value);

파라미터

value

Promise에 의해 결정되는 인수. Promise 또는 이행할 thenable 일수도 있습니다.

반환 값

주어진 값으로 이행된 Promise 또는 값이 promise 객체인 경우, 값으로 전달된 promise.

설명

정적 Promise.resolve 함수는 이행된 Promise 를 반환합니다.

예시

정적 Promise.resolve 메소드 사용

js
Promise.resolve("Success").then(
  function (value) {
    console.log(value); // "Success"
  },
  function (value) {
    // 호출되지 않음
  },
);

배열 이행

js
var p = Promise.resolve([1, 2, 3]);
p.then(function (v) {
  console.log(v[0]); // 1
});

또 다른 Promise 이행

js
var original = Promise.resolve(33);
var cast = Promise.resolve(original);
cast.then(function (value) {
  console.log("value: " + value);
});
console.log("original === cast ? " + (original === cast));

// 로그 순서:
// original === cast ? true
// value: 33

로그의 순서가 반대인 이유는 then 핸들러가 비동기로 호출되기 때문입니다. 여기에서 then 이 동작하는 방식에 대해 확인하세요.

thenable 이행 및 오류 발생

js
// thenable 객체 이행
var p1 = Promise.resolve({
  then: function (onFulfill, onReject) {
    onFulfill("fulfilled!");
  },
});
console.log(p1 instanceof Promise); // true, 객체는 Promise 로 변환됨

p1.then(
  function (v) {
    console.log(v); // "fulfilled!"
  },
  function (e) {
    // 호출되지 않음
  },
);

// thenable 이 콜백 이전에 오류를 throw
// Promise 거부
var thenable = {
  then: function (resolve) {
    throw new TypeError("Throwing");
    resolve("Resolving");
  },
};

var p2 = Promise.resolve(thenable);
p2.then(
  function (v) {
    // 호출되지 않음
  },
  function (e) {
    console.log(e); // TypeError: Throwing
  },
);

// thenable 이 콜백 이후에 오류를 throw
// Promise 이행
var thenable = {
  then: function (resolve) {
    resolve("Resolving");
    throw new TypeError("Throwing");
  },
};

var p3 = Promise.resolve(thenable);
p3.then(
  function (v) {
    console.log(v); // "Resolving"
  },
  function (e) {
    // 호출되지 않음
  },
);

명세

Specification
ECMAScript Language Specification
# sec-promise.resolve

브라우저 호환성

BCD tables only load in the browser

함께 보기