JavaScriptにおけるPromiseの例外処理
Promise内部で発生した例外を処理する方法を学びましょう。 このような状況が発生した場合、Promise関数の第2引数として自動的に渡される特別な拒否関数を使用してPromiseを拒否する必要があります。
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
...
}, 3000);
});
Promise関数内では、すべてが正常に進んだ場合は
resolveを、例外が発生した場合は
rejectを呼び出す必要があります。
let promise = new Promise(function(resolve, reject) {
setTimeout(function() {
let isError = false;
if (!isError) {
resolve([1, 2, 3, 4, 5]); // promiseのデータ
} else {
reject('error in promise'); // エラーテキスト
}
}, 3000);
});
次に、thenメソッドでは1つではなく2つの関数を引数として渡す必要があります。1つ目はPromiseが正常に処理された場合(解決された場合)に実行され、2つ目はエラーが発生した場合(拒否された場合)に実行されます。
promise.then(
function(result) {
console.log(result); // promiseの結果を表示
},
function(error) {
console.log(error); // エラーテキストを表示
}
);
通常、上記のコードは次のようによりコンパクトに記述されます。
promise.then(function(result) {
console.log(result); // promiseの結果を表示
}, function(error) {
console.log(error); // エラーテキストを表示
});
0から5までの乱数を生成する非同期コードを作成してください。
すべてをPromiseでラップします。Promiseは生成された数で1を割った結果をその結果として返すようにします。
ゼロ除算が発生した場合はエラーでPromiseを拒否し、それ以外のすべての場合では成功させるようにしてください。