AngularJS - Warum verspricht ($ q) mit $ http?

Ich lerne AngularJS, nachdem ich einige Jahre von jQuery konvertiert habe. Und einige Teile sind viel intuitiver. Manche nicht so sehr :).

Ich versuche, mich mit der Verwendung von Versprechungen zu beschäftigen, insbesondere mit $ q in Verbindung mit $ http, und es scheint nicht zu viele Informationen zu diesen beiden zusammen zu geben, die ich finden kann.

Warum würde ich Versprechen anstelle des Erfolgs- / Fehler-Rückrufs verwenden? Beide nutzen Rückrufe in der Realität. Warum wird ein Versprechen als besser angesehen? Z.B. Ich könnte ein @ einrichtget(...) funktioniert wie folgt:

function get(url, success, error) {
    success = success || function () {};
    error = error || function () {};

    $http.get(url)
        .success(function (data) {
            success(data);
        })
        .error(function (error) {
            error(error);
        });
}

get('http://myservice.com/JSON/',
    function () {
        // do something with data
    },
    function () {
        // display an error
    }
);

Was ist gut (?), Weil es mir die vollständige Kontrolle darüber gibt, was passiert. Wenn ich @ anruget(...) dann kann ich jeden Erfolg / Fehler kontrollieren, wo immerget wird genannt

Wenn ich dies konvertiere, um Versprechen zu verwenden, erhalte ich:

function get(url) {
    return $http.get(url)
        .then(function (data) {
            return data;
        },
        function (error) {
            return error;
        });
}

get('http://myservice.com/JSON/')
    .then(function (data) {
        // do something with data
    });
    // cannot handle my errors?

Welche kondensiert ist, stimme ich zu; Wir müssen uns auch nicht explizit um den Erfolg / Fehler-Rückruf kümmern, aber ich habe anscheinend die Kontrolle über meinen Fehler-Rückruf verloren, da ich keinen zweiten Rückruf zur Behandlung eines Fehlers konfigurieren kann.

Was bedeutet, dass ich, wenn ich diese Funktion in einem Dienst verwende, der von mehreren Controllern verwendet werden kann, die Benutzeroberfläche nicht aktualisieren kann, um den Benutzer auf einen Fehler aufmerksam zu machen.

Bin ich etwas vermisst? Gibt es einen Grund, warum Versprechen bevorzugt werden? Ich kann kein Beispiel finden, warum.

Antworten auf die Frage(4)

Ihre Antwort auf die Frage