Используя jQuery, я знал, что обещание - это способ асинхронного режима программирования JS, но я не понимал разницы между ним и отложенным объектом JQuery. По мере развития проекта компании мы должны получать данные от бэкэнда, поэтому мы решили сделать это.
Обещать
Обещание - это режим, который управляет асинхронными событиями в виде синхронных операций, избегая слоя по слою гнездования и может управлять асинхронными событиями в цепях.
Мы знаем, что при написании асинхронного кода JavaScript обратный вызов является самым простым механизмом, но если вы используете этот механизм, вы должны пожертвовать потоком управления, обработкой исключений и семантикой функции и даже позволим нам попасть в яму обратного вызова и обещают решить эту проблему.
В ES6 встроенные angularjs встроенный Q в обещаниях, AngularJs, и когда они используют обещания/спецификации, следующим образом:
Каждое задание имеет три состояния: ожидающие, выполненные и неудачные.
1. СОСТОЯНИЕ ПРЕДЛОЖЕНИЯ: Вы можете перейти к выполнению или состоянию отклонения.
2. Заполненное состояние: не может быть изменено на любое другое состояние, и состояние не может быть изменено, и должно быть значение значения.
3. Зарегистрированное состояние: оно не может быть изменено на любое другое состояние, и государство не может быть изменено, должна быть причина.
Передача состояния единовременно. Как только государство будет выполнено (завершено) или не удалось (не удалось/отклоняется), оно больше не может измениться.
Кода -копия выглядит следующим образом:
Функция oktogreet (name) {
возвращение имени === 'Робин Гуд';
}
Функция asyncgreet (name) {
var deferred = $ q.defer ();
settimeout (function () {
// Поскольку эта асинхронная функция FN будет выполнена в будущем асинхронно, мы обертываем код в звонок $ применить, при этом правильно наблюдая за изменением модели
$ scope. $ Apply (function () {
DEFERRED.NOTIFY ('ОБРАЗОВАНИЕ Приветствовать' + name + '.');
if (oktogreet (name)) {
deferred.resolve ('Привет, + name +'! ');
} еще {
deferred.reject («приветствие» + имя + 'не разрешено.');
}
});
}, 1000);
return DEFERRED.PROMISE;
}
var promise = asyncgreet ('robin good');
обещание.then (function (приветствие) {
оповещение («Успех:» + приветствие);
}, функция (разум) {
оповещение ('не удалось:' + разум);
}, function (update) {
Alert ('Got уведомление:' + update);
});
Основное использование q обещания
Приведенный выше код показывает роль нескольких методов деффированных экземпляров, построенных $ Q.Defer (). Если асинхронная операция является успешной, состояние объекта обещания изменяется на «успех» (то есть, от ожидаемого до разрешения); Если асинхронная операция не выполняется, состояние изменяется на «неудачу» (то есть с ожидания до отклонения). Наконец, верните отложенные.
У JS будет иметь нативные обещания, в ES6 уже есть обещательные объекты, а API базового обещания реализован в версиях Firefox и Chrome 32.
$ Q.defferd в Angularjs
Верните объект Deffered, который будет называться цепочкой, позвонив в $ Q.Defferd. Этот объект связывает три состояния задачи в спецификации обещаний/A через API.
Deffered API
Метод объекта Deffered
1. РЕСОВЕР (значение): При объявлении Resolve () это указывает на то, что объект перспектива изменяется от ожидаемого состояния для разрешения.
2. Reject (разум): при объявлении Resolve () это указывает на то, что объект перспективы изменяется от ожидаемого состояния в отклонение.
3. НЕТИТЕ (значение): при объявлении уведомления () это указывает на то, что невыполненное состояние объекта обещания может быть вызвано несколько раз перед разрешением или отклонением.
Deffered объекта свойства
Обещание: Последнее, что возвращает, - это новое свойство обещания отложенного объекта, а не оригинальный отложенный объект. Этот новый объект перспектива может наблюдать только о состоянии исходного объекта Promise и не может изменить внутреннее состояние отложенного объекта, что может предотвратить изменение состояния задачи извне.
Обещание API
При создании отложенного экземпляра создается новый объект перспективы, и ссылка может быть получена через DEFERRED.PROMISE.
Цель объекта обещания состоит в том, чтобы позволить заинтересованной части получить результаты выполнения при выполнении отложенной задачи.
Методы обещания объектов
1. Тогда (ErrorHandler, FulfilledHandler, ProgressHandler): тогдашний метод используется для прослушивания разных состояний обещания. Ошибка и прослушивает неудачное состояние, выполняемый и прослушивает выполняемое состояние, а ProgressHandler слушает невыполненное состояние. Кроме того, обратный вызов уведомления может быть вызван от 0 до нескольких раз, предоставляя индикацию прогресса перед разрешением или отклонением (разрешение и отклонение).
2.catch (errorcallback) - ярлык, чтобы обещать. Тот (null, errorcallback)
3. Наконец (обратный вызов) - позволяет вам наблюдать, выполняется ли обещание или отклоняется, но вам не нужно изменять последнее значение. Это может использоваться для освобождения ресурсов или очистки бесполезных объектов, независимо от того, отвергается ли обещание или разрешено. Для получения дополнительной информации, пожалуйста, обратитесь к полной спецификации документации.
Вызов цепочки обещаний может быть реализован с помощью метода Then ().
Кода -копия выглядит следующим образом:
OrdingB = romisea.Then (function (result) {
вернуть результат + 1;
});
// обещание будет обработан сразу после обработки обещания,
// и значение его значения является результатом увеличения обещания на 1
Другие методы $ Q
$ Q. Когда (значение): пройти значение переменной, обещание. Then () выполняет успешный обратный вызов
$ Q.all (обещания): Многочисленные обещания должны быть успешно выполнены, прежде чем они могут быть успешно выполнены. Значение передается как массив или хэш. Каждое значение в массиве - это объект обещания, соответствующий индексу.