Давайте поговорим о том, что такое обещание и что такое $ Q в первую очередь. Обещание - это асинхронный режим обработки, со многими методами реализации, такими как знаменитый Q Крис Квал и Jquery.
Что такое обещание
Те, кто узнал об Ajax раньше, могут испытать боль от обратных вызовов. Синхронный код легко отлаживать, но асинхронный код обратного вызова заставит разработчиков попасть в страшную часть и не может отслеживать, например:
funa (arg1, arg2, function () {funcb (arg1, arg2, function () {funcc (arg1, arg2, function () {xxxx ......})})})})Само гнездование уже трудно понять, и, кроме того, обратный вызов будет вызван в какое -то неизвестное время, что эквивалентно добавлению оскорбления к травмам.
Однако со спецификацией перспектива это может помочь разработчикам писать асинхронный код синхронно, например, в AngularJS:
deferabc.resolve (xxx)
.then (funcsuccess () {}, funcerror () {}, funcnotify () {});
Когда объект в решимости будет успешно выполнен, FuncSuccess будет запускается, и если он не удастся, будет запущена функция. Немного похож
deferabc.resolve (function () {sunccess: funcsuccess, ошибка: Funcerror, уведомление: Funcnotify})Говоря, обещание-это предварительное определение неопределенных результатов выполнения. Если это удастся, это будет XXXX; Если это не удастся, это будет xxxx, точно так же, как дает некоторые обещания заранее.
Например, Сяобай был очень ленивым, когда он учился в школе. Он всегда просил своего соседа по комнате принести еду и заранее говорил ему, что если бы был лук и яйца, он купил бы этот овощ, в противном случае он будет покупать жареные яйца с помидорами; Независимо от того, мог ли он их купить, он должен помнить, чтобы принести пачку сигарет.
Сяобай попросил своего соседа по комнате принести еду ()
Затем (яйца лука, яичницы с томатами)
.finally (с пакетом сигарет)
$ Q Service
Служба Q является реализацией перспективы, реализованной сама по себе в AngularJS, которая намного легче, чем Крис Квал.
Позвольте мне сначала представить несколько часто используемых методов $ Q:
DEFER () создает отложенный объект, который может выполнять несколько часто используемых методов, таких как решимость, отклонение, уведомление и т. Д.
All () проходит в массиве обещаний, выполняет партии и возвращает объект обещания
Когда () проходит неопределенный параметр, если он соответствует стандарту обещания, он возвращает объект обещания.
В обещании определены три государства: состояние ожидания, состояние завершения и состояние отказа.
Есть несколько правил, касающихся статуса:
1 Изменения в состоянии необратимы
2 Состояние ожидания может стать полным или отклоненным
Метод DEFER ()
В $ Q вы можете использовать метод разрешения, чтобы стать состоянием завершения; Используйте метод отклонения, чтобы стать состоянием отклонения.
Давайте посмотрим на простое использование $ Q:
<html ng-app = "myApp"> <head> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"/> <script src = "http://apps.bdimg.com/libs/gangular.js/1.2.16/angular.min.min. <div ng-controller = "myctrl"> {{test}} </div> <script type = "text/javascript"> var myappmodule = angular.module ("myApp", []); myappmodule.controller ("myctrl", ["$ scope", "$ q", функция ($ q) {$ scope.test = 1; // Это используется только для проверки того, является ли Angularjs нормальным, и не имеет другой функции var defer1 = $ q.defer (); var promise1. Speak1 --- Успех "); console.log (value);}, function (value) {console.log (" in speak1 --- ошибка "); console.log (value);}, function (value) {console.log (" in romply1 --- ошибка "); консоль. Console.log (значение); console.log (значение); </script> </body> </html>где DEFER () используется для создания отложенного объекта, DEFER.PROMISE используется для возврата объекта перспектива для определения тогдашнего метода. Тогда есть три параметра, а именно: успешный обратный вызов, неудачный обратный вызов и обратный вызов изменения состояния.
Переменная или функция, передаваемая в разрешении, вернет результат и будет рассматриваться как параметр первого метода. Затем метод возвращает объект обещания, поэтому он может быть написан как
XXXX
.then (A, B, C)
.then (A, B, C)
.then (A, B, C)
.ловить()
.окончательно()
Давайте продолжим говорить о приведенном выше коде, тогда ... поймайте ... наконец -то подумайте об этом как о попытке ... поймать ... наконец на Java.
All () Метод
Этот метод всех () может объединить несколько примиз в один. Когда все обещания будут выполнены успешно, будет выполнено последующий обратный вызов. Параметры в обратном вызове являются результатом каждого выполнения обещания.
Этот метод можно использовать, когда некоторые методы выполняются в партиях.
var funca = function () {console.log ("funca"); вернуть "Привет, Фуна"; } var funcb = function () {console.log ("funcb"); вернуть "Привет, Фунб"; } $ Q.all ([funca (), funcb ()]) .Then (function (result) {console.log (result);});Результаты исполнения:
Фанка
Funcb
Array ["Привет, Фуна", "Привет, Фунар"]
Когда () метод
Когда метод может быть передан параметр, который может быть значением, и может быть внешним объектом, который соответствует стандарту обещания.
var funca = function () {console.log ("funca"); вернуть "Привет, Фуна"; } $ q.when (funca ()) .then (function (result) {console.log (result);});Этот метод может использоваться, когда пропущенные параметры являются неопределенными.
Привет, Фуна
Выше приведено подробное введение в информацию о обещании-$ Q Service в AngularJS. Мы будем продолжать добавлять соответствующую информацию в будущем. Спасибо за поддержку этого сайта!