Was ist der Unterschied zwischen .catch und .fail in jQuery?

Lesezeit: 3 Minuten

Benutzer-Avatar
Stefan

Das Kurzdokument für .fail sagt:

Fügen Sie Handler hinzu, die aufgerufen werden, wenn das verzögerte Objekt abgelehnt wird.

und das kurze doc für .catch ist genau das gleiche:

Fügen Sie Handler hinzu, die aufgerufen werden, wenn das verzögerte Objekt abgelehnt wird.

Quelle: http://api.jquery.com/category/deferred-object/

Die von den beiden Methoden akzeptierten Argumente scheinen unterschiedlich zu sein, und das Dokument von
.catch besagt, dass .catch ist ein Pseudonym von .then(null, fn)

Gibt es Fälle, in denen ich verwenden sollte .fail und andere, wo ich verwenden sollte .catch?

Oder … wenn ich nur eine Funktion habe … sind folgende Befehle austauschbar und existieren nur aus Kompatibilitäts-/historischen Gründen?

a) .fail(fn)

b) .catch(fn)

c) .then(null, fn)

Ich habe eine jsFiddle erstellt:

https://jsfiddle.net/sq3mh9j5/

Wenn es einen Unterschied gibt, könnten Sie bitte einige Beispiele geben, da ich neu bei jquery bin und noch nicht mit allen Versprechungsbegriffen vertraut bin.

Warum verweist das Dokument von .catch nicht auf das Dokument von .fail und verdeutlicht den Unterschied/die Ähnlichkeit?

Bearbeiten
Ich habe einige Hinweise in den Versionshinweisen zu 3.0 gefunden, dass sich das Verhalten von .then geändert hat.
https://blog.jquery.com/2015/07/13/jquery-3-0-and-jquery-compat-3-0-alpha-versions-released/
Trotzdem bin ich mir immer noch nicht sicher, wann ich .fail und wann .catch verwenden soll.

Benutzer-Avatar
Jack Wilson

catch und fail sind darin etwas anders catch gibt ein neues (aufgelöstes) Versprechen zurück, wohingegen fail wird das ursprüngliche Versprechen zurückgeben.

// 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");
  })

Beachten Sie, dass catch(fn) ist ein Pseudonym von then(null, fn).

  • wird das Versprechen erneut lösen” ist ziemlich irreführend. Der wichtige Punkt ist, dass es ein neues, eindeutiges Versprechen zurückgibt (genau wie then).

    – Bergi

    11. Januar 2018 um 13:48 Uhr

  • Ah, verstanden. Ich wusste nicht genau, wie ich es beschreiben sollte – ich werde meine Antwort aktualisieren. Vielen Dank

    – Jack Wilson

    11. Januar 2018 um 15:09 Uhr

  • Also wenn ich will break/exit der normale Arbeitsablauf bei Fehlern … werde ich verwenden fail (erstes Beispiel) und wenn ich eine implementieren möchte always Klausel verwende ich ein dann danach catch (zweites Beispiel).

    – Stefan

    11. Januar 2018 um 15:22 Uhr

  • @Stefan Ich empfehle einfach nie zu verwenden fail und done.

    – Bergi

    11. Januar 2018 um 16:20 Uhr

Ich denke also, der Hauptunterschied besteht darin, was Sie aus jedem herausholen.

Mit einem catch können Sie eine einzelne Funktion ausführen.

Ein Fehler ermöglicht es Ihnen, eine Reihe von Funktionen auszuführen.

Ansonsten stimme ich deinen Feststellungen zu. Sie sind sehr ähnlich.

Ich habe einen Beispielcode hinzugefügt, um zu zeigen, wie fail beide Funktionen ausführt und catch nur die eine ausführt.

 $.ajax({
            url: "abc"
        }).done(function (data) {

        }).fail(function () {
            alert("a");
        }, function () {
            alert("b");
        })
                .catch(function () {
                    alert("c");
                }, function () {
                    alert("d");
                });

Wenn Sie dies ausführen, erhalten Sie ‘a’, ‘b’, ‘c’ und dann wird ‘d’ nicht ausgeführt.

Ich hoffe, dieses einfache Beispiel zeigt den Unterschied.

1093350cookie-checkWas ist der Unterschied zwischen .catch und .fail in jQuery?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy