JavaScriptのPromiseオブジェクトのサンプルです。
| 確認環境 ・Windows 10 ・Google Chrome |
目次
Promiseオブジェクト
- 非同期処理の最終的な成功または失敗を表すオブジェクトです。
- ECMAScript 2015(ES6)で導入されました。
- 以下は、MDNの「Promiseを使う」と「Promise」のリンクです。
https://developer.mozilla.org/ja/docs/Web/JavaScript/Guide/Using_promises
https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise
Promiseオブジェクトを使用したサンプル
Promiseオブジェクトを使用したサンプルです。
ボタンを何回か押すと文字列が変わります。
ボタンを押して下さい
結果
コード
上記コードのサンプルです。
3行目のボタンをクリックすると6行目の関数を実行します。
9行目は、14行目の関数を実行します。
17,18行目の結果(0か1)によって21行目のresolveまたは23行目のrejectが実行されます。
10,11行目は、上記の結果がresolveのときは.then、rejectのときは.catchが実行されます。
<p>ボタンを押して下さい</p>
<p><span id="span1">結果</span></p>
<input type="button" value="ボタン1" onclick="clickBtn1()">
<script>
function clickBtn1(){
let s1 = document.getElementById("span1");
test1()
.then(ok1 => {s1.textContent = ok1;})
.catch(error => {s1.textContent = error;});
}
function test1(){
return new Promise((resolve,reject)=>{
const rand = Math.random();
const num = Math.floor(rand*2); //0 or 1
if(num==0){
resolve("0です");
}else if(num==1){
reject("1です");
}
});
}
</script>
9行目は、14行目の関数を実行します。
15行目は、PromiseのコンストラクタでPromiseオブジェクトを返しています。
引数のresolveは成功を伝える関数でrejectは失敗を伝える関数です。
17,18行目は乱数で0または1を生成します。
20~24行目は、ここではサンプルとして0の場合は成功、1の場合は失敗としています。
10行目のthenは、21行目のresolveが実行された場合に実行されます。ok1の値は21行目の文字列"0です"です。
11行目のcatchは、23行目のrejectが実行された場合に実行されます。errorの値は23行目の文字列"1です"です。
順に実行する
4,5行目のようにthenを続けると順に実行されます。
function clickBtn1(){
test1()
.then(() => {console.log("0の1回目");})
.then(() => {console.log("0の2回目");})
.catch(() => {console.log("1です");});
}
以下は、実行結果のイメージです。

並行して実行する
3~7行目のようにPromiseのallメソッドと関数を並べると並行して実行されます。
function clickBtn1(){
Promise.all([
test1(),
test1(),
test1()
])
.then(ok1 => {console.log(ok1);})
.catch(error => {console.log(error);});
}
以下は、実行結果のイメージです。
2行目は、3回連続で0が出た時に表示されます。配列になっています。

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise/all
どれか1つの処理が完了したら
3~7行目のようにPromiseのraceメソッドと関数を並べるとどれか1つの処理が完了したら結果を返します。
function clickBtn1(){
Promise.race([
test1(),
test1(),
test1()
])
.then(ok1 => {console.log(ok1);})
.catch(error => {console.log(error);});
}
以下は、実行結果のイメージです。

https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Promise/race
関連の記事
JavaScript 一定間隔で処理を繰り返す(setInterval)
JavaScript 指定した時間の経過後1度処理を実行する(setTimeout)