Я изучаю AngularJS после преобразования из jQuery в течение нескольких лет. И некоторые биты гораздо более интуитивно понятны. Некоторые не так много:).
Я пытаюсь использовать promises, особенно $q в использовании с $http, и, похоже, не слишком много информации об этих двух комбинированных, которые я могу найти.
Почему я должен использовать promises вместо обратного вызова успеха/ошибки? Оба они используют использование обратных вызовов в реальности, так почему же обещание считается лучше? Например. Я мог бы создать функцию 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
.
Если я конвертирую это для использования promises, я получаю:
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?
Что сгущается, я согласен; нам также не нужно явно беспокоиться об обратном вызове success/error, но я, похоже, потерял контроль над обратным вызовом моей ошибки для запуска - потому что я не могу настроить второй обратный вызов для обработки ошибки.
Это означает, что если я использую эту функцию в службе, которая может использоваться несколькими контроллерами, то я не могу обновить пользовательский интерфейс, чтобы предупредить пользователя об ошибке.
Я что-то упустил? Есть ли причина, почему promises является предпочтительным? Я не могу найти пример, почему.