初めに
Promiseの自学習第3回目の投稿です。
前回の記事は以下となります。
【JavaScript】Promiseをしっかり理解したい【その2】
Promise.resolveについて
今までPromiseオブジェクトを扱う際はnew
キーワードを使用してインスタンス化していました。
const promise = new Promise((resolve, reject) => {
...
});
しかし、上記以外の方法でもPromiseオブジェクトを生成することが可能です。
それは今まで扱ってきたreslove
を使用することで実現できます。
Promise.resolve(value)
Promise.resolve
は引数で与えられた値でPromise オブジェクトを返す静的メソッドです。
new
を使った構文だと以下と同じになります。
new Promise((resolve) => {
resolve(value);
});
Promise.resolve
で返ってくる値も同様にPromiseオブジェクトなので、 以下のように続けてthen
メソッドを使った処理を書くことができます。
resolveの引数に格納した値はthen
メソッドの引数に渡ります。
Promise.resolve('こんにちは').then(function(value) {
console.log(value);
});
こんにちは
今まで学習してきた関数からPromiseオブジェクトを返す書き方は以下になります。
function asyncFunc() {
return new Promise((resolve, reject) => {
resolve('こんにちは');
});
}
asyncFunc().then((value) => {
console.log(value);
});
こんにちは
配列をresolveする例は以下になります。
const p = Promise.resolve([1,2,3]);
p.then(function(value) {
console.log(value[0]);
});
1
また、Promise.resolve
に与えられた引数の値がPromise
なら、そのPromise
が返されます。
const p1 = Promise.resolve('p1でresolve');
const p2 = Promise.resolve(p1);
p2.then(function(value) {
console.log(value);
});
console.log(p1 === p2);
true
p1でresolve
非同期処理なので最後の行のconsole.logの結果が先に出力されています。p1
とp2
は同値となっています。それぞれp1でresolve
という値を持ったPromiseオブジェクトになっています。Promise.resolve
の引数にPromiseオブジェクトが渡された場合、そのPromiseオブジェクトが返されることになります。
まとめ
理解に時間をかけ過ぎてしまったので、内容が短いのですが今回はここまでにします。処理の流れの中でPromiseオブジェクトが返る、ということを意識するとPromiseの理解が良くなる、逆にここを曖昧にすると混乱してしまうのではないかと思いました。