私は、チュートリアルでは、次のコードが見つかりました:私は少し混乱してい再スローエラー
promise.then(function(result){
//some code
}).catch(function(error) {
throw(error);
});
を:キャッチコールは何も達成していますか?捕まえられたのと同じエラーが投げられるだけなので、何の効果もないようです。私は定期的なtry/catchの仕組みに基づいています。
私は、チュートリアルでは、次のコードが見つかりました:私は少し混乱してい再スローエラー
promise.then(function(result){
//some code
}).catch(function(error) {
throw(error);
});
を:キャッチコールは何も達成していますか?捕まえられたのと同じエラーが投げられるだけなので、何の効果もないようです。私は定期的なtry/catchの仕組みに基づいています。
裸のキャッチとスローにはポイントがありません。コードを追加して実行を遅らせること以外は何も役に立ちません。だから、.catch()
に行って再挑戦する場合は、.catch()
に何かしたいことがあります。そうしないと、.catch()
を完全に削除するだけです。
一般的な構造の通常のポイントは、エラーをログに記録したり、いくつかの状態(クローズファイルなど)をクリーンアップするなど、.catch()
で何かを実行したいときです。
promise.then(function(result){
//some code
}).catch(function(error) {
// log and rethrow
console.log(error);
throw error;
});
はチュートリアルでは、それは彼らがエラーをキャッチすることができたり、その後、エラーを処理し、それを再スローの概念を教えるために人々を表示するだけがあるかもしれません。
私の意見からは、NOE \トン良い例です。このようなアプローチでは、1つのエラーに対する複数のロギングを簡単に取得できます。 Javaでは、単に新しい例外(periousException)をスローすることができます; '私はJavaScriptがネストされたエラーをサポートするかどうかわかりませんが、とにかく"ログとスロー "は悪い習慣です。 – Cherry
@Cherry - これは一般的に悪い習慣であるとは言えません。モジュールがそれ自身の方法で独自のエラーを記録することが必要な時があります。これがその方法の1つです。また、私はこれを推薦していないよ、私はちょうど '' .catchを() '持っていて、' .catchで何かを()を実行しない限り、キャッチの内側に同じエラーをスローする理由がないことを説明しています。それがこの答えの要点です。 – jfriend00
あなたの質問のように聞こえます。 'promise chainでは、.catch()メソッドは何をしますか?
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/throw
throw文は「(投げの後のステートメントは実行されません)を停止し、制御が呼び出しスタック内の最初のcatchブロックに渡されます。何のcatchブロックは、発信者の機能の中で存在しない場合、プログラムは終了します。
promiseチェーンでは、.then()メソッドが何らかのタイプのデータチャンクを返します。このチャンクの復帰は約束を完了させるでしょう。成功したデータの復帰は約束を完了させる。同じ方法で.catch()メソッドを考えることができます。 .catch()は失敗したデータ取得を処理します。 throw文は約束を完了します。 Ocassionalyでは、開発者はpromise chainを完成させる.catch((err)=> {console.log(err)}}を使用するでしょう。
catch
メソッド呼び出しを完全に削除しても重要な違いはありません。
追加する唯一のことは実際にはcatch
句がないと失敗した約束の場合よりも、約束の拒否に気付くことを意味します。
次のスニペットはこのことを示しています。
var p;
// Case 1: with catch
p = Promise.reject('my error 1')
.catch(function(error) {
throw(error);
});
p.catch(error => console.log(error));
// Case 2: without catch
p = Promise.reject('my error 2');
p.catch(error => console.log(error));
は、第二の拒絶が最初に前に報告されているかに注意してください。それは唯一の違いです。
スニペットがうまく機能します。しかし、サービスは現在利用できません..ですチェック:http://meta.stackoverflow.com/a/337257/747579 –
.then()
と.catch()
のいずれのメソッドもプロミスを返し、どちらのハンドラでも例外をスローすると、返された約束は拒否され、例外は次の拒否ハンドラで捕捉されます。次のコードで
、我々は、第二.catch()
に捕捉される最初.catch()
に例外をスロー:
new Promise((resolve, reject) => {
console.log('Initial');
resolve();
})
.then(() => {
throw new Error('Something failed');
console.log('Do this'); // Never reached
})
.catch(() => {
console.log('Something failed');
throw new Error('Something failed again');
})
.catch((error) => {
console.log('Final error : ', error.message);
});
第.catch()
リターンはそれが満たされる約束、 .then()
ハンドラを呼び出すことができます:
new Promise((resolve, reject) => {
console.log('Initial');
resolve();
})
.then(() => {
throw new Error('Something failed');
console.log('Do this'); // Never reached
})
.catch(() => {
console.log('Something failed');
throw new Error('Something failed again');
})
.catch((error) => {
console.log('Final error : ', error.message);
})
.then(() => {
console.log('Show this message whatever happened before');
});
便利な参照:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises#Chaining_after_a_catch
は、この情報がお役に立てば幸い!
、チュートリアルへのリンクを提供してもらえますか?おそらく、役に立つかもしれない追加の文脈があります。 – Igor
@Igor私はPluralsightにありません。これはおそらくエラーを渡すエラーの単なるプレースホルダですか? –
これは、何もしないので、最初にキャッチを持たないことで達成できる呼び出し元にエラーを渡すことはないと思います。 – Igor