Skip to content

Latest commit

 

History

History
74 lines (50 loc) · 2.12 KB

promise-resolve.adoc

File metadata and controls

74 lines (50 loc) · 2.12 KB

new Promiseのショートカット

一般に new Promise() を使う事でpromiseオブジェクトを生成しますが、 それ以外にもpromiseオブジェクトを生成する方法があります。

この節では、Promise.resolvePromise.reject について学びたいと思います。

Promise.resolve

Promise.resolve(value) という静的メソッドは、 実は new Promise() のショートカットとなるメソッドです。

例えば、 Promise.resolve(42) というのは下記のコードのシンタックスシュガーです。

new Promise(function(resolve){
    resolve(42);
});

結果的にすぐに`resolve(42)`と解決されて、次のthenの`onFulfilled`に設定された関数に`42`という値を渡します。

Promise.resolve(value)の返す値も同様にpromiseオブジェクトなので、 以下のように .then を使った処理を書くことが出来ます。

var promise = Promise.resolve(42);
promise.then(function(value){
    console.log(value);
});

ユースケース

Promise.resolve(value) はどういう時に使用するのかというと、 promiseオブジェクトではない値を受け取る関数を書くときに等に利用できます。

Promise.resolve(value) 等を使った場合、 promiseオブジェクトがすぐにresolveされるので、.then に登録した関数も同期的に処理が行われるように錯覚してしまいます。

しかし、実際には`.then`に登録した関数が呼ばれるのは、非同期のタイミングとなります。

var promise = new Promise(function(resolve){
    console.log("inner promise");// (1)
    resolve(42);
});
promise.then(function(value){
    console.log(value); // (3)
});
console.log("outer promise");// (2)

上記のコードは数値の順に呼ばれるため、出力結果は以下のようになります。

inner promise
outer promise
42