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?
Что сжато, я согласен; нам также не нужно явно беспокоиться об обратном вызове «успех / ошибка», но я, похоже, потерял контроль над моим обратным вызовом ошибки для начала - потому что я не могу настроить второй обратный вызов для обработки ошибки.
Это означает, что если я использую эту функцию в службе, которая может использоваться несколькими контроллерами, то я не могу обновить пользовательский интерфейс, чтобы предупредить пользователя об ошибке.
Я что-то пропустил? Есть ли причина, почему обещания предпочтительнее? Я не могу найти пример, почему.