_.fail
_の短いドキュメントには次のように書かれています。
Deferredオブジェクトが拒否されたときに呼び出されるハンドラーを追加します。
_.catch
_の短いドキュメントはまったく同じです。
Deferredオブジェクトが拒否されたときに呼び出されるハンドラーを追加します。
ソース: http://api.jquery.com/category/deferred-object/
2つのメソッドで受け入れられる引数は異なるようで、_.catch
_のドキュメントには、_.catch
_は.then(null, fn)
のエイリアスであると記載されています。
_.fail
_を使用する必要がある場合と_.catch
_を使用する必要がある場合はありますか?
または...機能が1つしかない場合...次のコマンドは互換性があり、互換性/歴史的な理由でのみ存在しますか?
_a) .fail(fn)
b) .catch(fn)
c) .then(null, fn)
_
JsFiddleを作成しました:
https://jsfiddle.net/sq3mh9j5/
違いがある場合は、jqueryを初めて使用し、すべてのpromise用語にまだ精通していないため、いくつかの例を提供してください。
.catchのドキュメントが.failのドキュメントを参照せず、相違点/類似性を明確にしないのはなぜですか?
Edit3.0リリースノートで.thenの動作が変更されたというメモをいくつか見つけました。 https://blog.jquery.com/2015/07/13/jquery-3-0-and-jquery-compat-3-0-alpha-versions-released/ それでもまだわからない.failを使用する場合と.catchを使用する場合。
catch
とfail
は少し異なり、catch
は新しい(解決済みの)promiseを返しますが、fail
は元のpromiseを返します。
_// This will only output "fail"
$.Deferred()
.reject(new Error("something went wrong"))
.fail(function() {
console.log("fail");
})
.then(function() {
console.log("then after fail");
})
_
_// This will output "catch" and "then after catch"
$.Deferred()
.reject(new Error("something went wrong"))
.catch(function() {
console.log("catch");
})
.then(function() {
console.log("then after catch");
})
_
ですから、大きな違いは、それぞれから得られるものだと思います。
キャッチを使用すると、単一の関数を実行できます。
失敗すると、いくつかの機能を実行できます。
それ以外は、私はあなたの発見に同意します。それらは非常に似ています。
Failが両方の関数を実行し、catchが1つだけを実行する方法を示すサンプルコードを追加しました。
$.ajax({
url: "abc"
}).done(function (data) {
}).fail(function () {
alert("a");
}, function () {
alert("b");
})
.catch(function () {
alert("c");
}, function () {
alert("d");
});
これを実行すると、「a」、「b」、「c」が表示され、「d」は実行されません。
この簡単な例が違いを示していることを願っています。