AngularJS - почему обещает ($ q) с $ http?

Я изучаю AngularJS после конвертации из jQuery в течение нескольких лет. И некоторые биты гораздо более интуитивно понятны. Некоторые не так много :).

Я пытаюсь осмыслить использование обещаний, особенно $ q при использовании $ http, и, кажется, не слишком много информации об этих двух вместе взятых, которые я могу найти.

Зачем мне использовать обещания вместо обратного вызова «успех / ошибка»? Они оба используют обратные вызовы в реальности, так почему же обещание считается лучше? Например. Я мог бы создатьget(...) функция как следует:

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

Что хорошо (?), Потому что дает мне полный контроль над происходящим. Если я позвонюget(...) тогда я могу контролировать любой успех / ошибки вездеget называется.

Если я преобразую это, чтобы использовать обещания, тогда я получу:

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?

Что сжато, я согласен; нам также не нужно явно беспокоиться об обратном вызове «успех / ошибка», но я, похоже, потерял контроль над моим обратным вызовом ошибки для начала - потому что я не могу настроить второй обратный вызов для обработки ошибки.

Это означает, что если я использую эту функцию в службе, которая может использоваться несколькими контроллерами, то я не могу обновить пользовательский интерфейс, чтобы предупредить пользователя об ошибке.

Я что-то пропустил? Есть ли причина, почему обещания предпочтительнее? Я не могу найти пример, почему.

Ответы на вопрос(2)

Ваш ответ на вопрос