「then」の第2引数を使って、処理を分岐する例です。
new Promise(function(resolve, reject) { setTimeout(function() { reject(); }, 1000); }) .then( function() { console.log('解決'); }, function() { console.log('拒否'); } );
拒否
「catch」を使って分岐する例です。
new Promise(function(resolve, reject) { setTimeout(function() { reject(); }, 1000); }) .then(function() { console.log('解決1'); }) .then(function() { console.log('解決2'); }) .catch(function() { console.log('キャッチ'); });
キャッチ
「then」による分岐と「catch」による分岐を混ぜた例です。
new Promise(function(resolve, reject) { setTimeout(function() { reject(); }, 1000); }) .then( function() { console.log('解決1') }, function() { console.log('拒否1') } ) .then( function() { console.log('解決2') }, function() { console.log('拒否2') } ) .catch(function() { console.log('キャッチ') });
拒否1 解決2
「reject」で値を送る例です。
new Promise(function(resolve, reject) { setTimeout(function() { reject('エラー'); }, 1000); }) .then( function(arg) { console.log('解決', arg); }, function(arg) { console.log('拒否', arg); } );
拒否 エラー
「Promise」には3つの状態があります。初期状態の「待機」(pending)と、処理が成功して完了した「履行」(fulfilled)、処理が失敗した「拒否」(rejected)です。
待機状態の「Promise」は、値を持った履行状態か、エラーの理由を持った拒否状態に変わります。
「Promise」が待機以外の状態になった場合は、「決定」(settled)と呼ばれます。
これらの状態遷移を知らなくてもプログラムは書けますが、覚えておくとよいです。