Promise.resolve()

Promise.resolve() メソッドは引数で与えられた値で解決されたPromise オブジェクトを返します。もし与えられた引数の値が Promise なら、そのPromise が返されます。もし与えられた引数の値が thenable なら (すなわち "then" メソッドを持っている場合)、返される Promise はその thenable を「たどって処理し」、その最終的な状態を採用するものとなります。それ以外では、返される Promise は引数の値で充足されるものとなります。

構文

Promise.resolve(value);
Promise.resolve(promise);
Promise.resolve(thenable);

引数

value
Promise によって完了される引数。Promise または完了する then

戻り値

所与の値で解決された Promise 、または value が promise オブジェクトの場合、value として渡された promise。

説明

静的な Promise.resolve 関数は完了する Promise を返します。

静的な Promise.resolve メソッドを使う

Promise.resolve("Success").then(function(value) {
  console.log(value); // "Success"
}, function(value) {
  // not called
});

配列を完了する

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

別の Promise を完了する

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

// logs, in order:
// original === cast ? true
// value: 33

ログの反転された順番は then ハンドラーが非同期に呼び出されることによります。then の動作はこちらを見てください。

thenables を完了しエラーをスローする

// Resolving a thenable object
var p1 = Promise.resolve({ 
  then: function(onFulfill, onReject) { onFulfill("fulfilled!"); }
});
console.log(p1 instanceof Promise) // true, object casted to a Promise

p1.then(function(v) {
    console.log(v); // "fulfilled!"
  }, function(e) {
    // not called
});

// Thenable throws before callback
// Promise rejects
var thenable = { then: function(resolve) {
  throw new TypeError("Throwing");
  resolve("Resolving");
}};

var p2 = Promise.resolve(thenable);
p2.then(function(v) {
  // not called
}, function(e) {
  console.log(e); // TypeError: Throwing
});

// Thenable throws after callback
// Promise resolves
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) {
  // not called
});

仕様

仕様 状況 コメント
ECMAScript 2015 (6th Edition, ECMA-262)
Promise.resolve の定義
標準 ECMA 標準での初期定義。
ECMAScript Latest Draft (ECMA-262)
Promise.resolve の定義
ドラフト    

ブラウザ実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
resolve()Chrome 完全対応 32Edge 完全対応 12Firefox 完全対応 29IE 未対応 なしOpera 完全対応 19Safari 完全対応 8WebView Android 完全対応 4.4.3Chrome Android 完全対応 32Firefox Android 完全対応 29Opera Android 完全対応 ありSafari iOS 完全対応 8Samsung Internet Android 完全対応 ありnodejs 完全対応 0.12

凡例

完全対応  
完全対応
未対応  
未対応

関連情報