Решите, что функция обратного вызова слишком глубока, а параллельная логика должна выполняться по -серийно. Обещание представляет собой конечный результат асинхронной операции. Основным способом взаимодействия с обещанием является регистрация функции обратного вызова через его метод Then (), чтобы получить конечное значение результата обещания.
Протоколы, связанные с обещаниями, включают в себя и продюсеа+ обещание+
Определите обещание класса
Определите очередь очереди атрибутов, инициализируйте пустой массив []
Определите значение значения свойства, инициализируйте NULL
Определите статус статуса свойства и инициализируйте «ожидание» (значение по умолчанию)
Определить метод члена getQueue (), очередь возврата атрибутов
Определить метод члена getStatus (), вернуть статус атрибута
Определить метод члена setStatus (), установить состояние, параметры пропуска: состояние, значение
Определить, что статус выполняется или отвергается,
Установить свойство статуса this.status = статус
Установите свойство значения this.value = value || null, если вы не проходите значение, оно ноль
Определите переменную Freeze FreezeObject
Определите метод члена isfulfiled (), чтобы определить, является ли текущее состояние (завершено)
Определите метод элемента isrejected (), чтобы определить, является ли текущее состояние (не удалось)
Определите метод члена ispending (), определите текущий мастер состояния (ожидание)
Определите метод члена Then (), PAST PARAMETMERS: ONFULFILLIFLEAD CALLBACK, ONERECTINED с неудачным обратным вызовом
Определите две функции обратного вызова: объект обработчика, выполнение атрибутов, отвергнуто
Определите отложенное свойство объекта обработчика, отложенного объекта
Определите, ждет ли текущее состояние. Если он ждет, поместите объект обработчика в массив очередей в очереди
Если это не состояние ожидания, вызовите метод Procusure () объекта UTILS, параметр: статус,
Return handler.deferred.promise объект
Определите класс.
Определите обещание атрибута и инициализируйте объект обещания
Определите метод элемента Resolve (), передайте параметр: результат результата
Определите статус объекта обещания как ожидание и вернуть напрямую
Вызовите метод getQueue () объекта обещания, чтобы получить массив очередей
Массив петли
// TODO вызывает UTILS Class Class. Метод процедуры (), параметры: «исполненный», элемент, ошибка информации
Вызовите метод setStatus () объекта обещания, установите статус, параметры: «исполнен», результат
Определите метод члена Ответ, ПАРАМЕТРЕТ: Сообщение об ошибке ошибки
Определите статус объекта обещания как ожидание и вернуть напрямую
Вызовите метод getQueue () объекта обещания, чтобы получить массив очередей
Массив петли
// todo, позвоните в класс инструментов. Метод процедуры (), параметры: «отклонен», элемент, ошибка информации
Вызовите метод setStatus () объекта обещания, установите статус, параметры: «исполнен», результат
Определите UTILS класса инструментов, немедленно выполните его, используя анонимные функции и получите объект
Возвращает объект, в объекте есть метод процедура ()
Определить метод Procusure (), Параметры передачи: тип состояния типа, массив процессоров обработчика, результат результата
Получите функцию обработки, в Handler [Type]
Я был кружился, когда попал сюда. Полем Полем
Как использовать:
Определите функцию ajax, пропустите параметр: путь URL
Получите отложенный объект и выйдите новым
Код Ajax для запроса данных в методе обратного вызова, который возвращает данные
Если метод Resolve () отложенного объекта успешно вызван, параметр: вернуть данные
Если метод decuct () отложенного объекта называется сбой, параметр: возвращаемые данные
Вернуть объект отложенного.
Вызовите метод ajax (), чтобы получить объект обещания, параметр: url,
Вызовите метод then () объекта обещания, параметры: анонимная функция
Вызовите метод ajax (), чтобы получить объект обещания и вернуть этот объект
Сформировать цепный звонок
JS Часть:
<Script> // Код обещания (я выбрал пояс для собак) promise = function () {this.queue = []; this.value = null; this.status = 'woutending'; // routending fulficted отклонил}; spect.prototype.getqueue = function () {return this.queue;}; respertotype.getStatus = function () {return this.status;}; orptotype.setStatus = function (s, value) {if (s == 'worptileble. 'отклонил') {this.status = s; this.value = value || нулевой; this.queue = []; var freezeObject = object.freeze || function () {}; freezeObject (this); // Состояние обещания необратимо} else {бросить новую ошибку ({сообщение: "не поддерживает статус:" + s}); }}; Spect.prototype.isfulfiled = function () {return this.status === 'fulfillifil';}; resployphype.isrejected = function () {return this.status === 'desucted';} promise.prototype.ispending = function () {return.Status = vendyProty. function (onfulfiled, onrejected) {var handler = {'fulfiled': onfulfiled, 'отклоненный': onrejected}; handler.deferred = new Deferred (); if (! this.ispending ()) {// Это разрешено сначала изменить статус обещания, а затем добавить обратные вызовы utils.procedure (this.status, обработчик, this.value); } else {this.queue.push (handler); // затем можно назвать несколько раз на одном и том же обещании; спецификация 2.2.6} return handler.deferred.promise; // затем должен вернуть обещание; Процедура = Тип, Хэндлер, Результат) {var func = Handler [type]; newresult.then (function (data) {// def.resolve (data); //}, function (err) {// def.reject (err); //}); // IF/Когда x выполняется, выполняет обещание с тем же значением. {Transition (def, «Отклонено», ERR); «В ожидании» {Throw New Erry ({'Message': "Не поддерживает тип:" + type}); } var queue = this.promise.getqueue (); for (var i = 0, len = queue.length; i <len; i ++) {utils.procedure ('fulfillifle', queue [i], result); } this.promise.setStatus ('fulfillid', result);}; deferred.prototype.reject = function (err) {if (! this.promise.ispending ()) {return; } var queue = this.promise.getqueue (); for (var i = 0, len = queue.length; i <len; i ++) {utils.procedure ('отклонил', queue [i], err); } this.promise.setStatus ('отклонить', err);}/*********************************************************************** var xhr = new xmlhttprequest (); xhr.onreadyStateChange = function () {if (xhr.readyState === 4) {if ((xhr.status> = 200 && xhr.status <300) || xhr.status === 304) {def.Resulv (xhr.ResponseText)} else {// somplectify ajax aRembreck nefback nefback nefback nefback nefback writback refback refbarce reax. Error ({сообщение: xhr.status})); }}}}}; xhr.open ('Get', url, true); xhr.send (null); return def.promise;} ajax ('test.php? act = 1'). Затем (function (data1) {console.log (data1); // обрабатывать данные1 return ajax ('test.php? {console.error (err);}). Тогда (function (data3) {console.log (data3); alert ('success');}, function (err) {console.error (err);}); </script>PHP:
<? phpif ($ _ get ['act'] == 1) {echo json_encode (array ("code" => 200));} else if ($ _ get ['act'] == 2) {echo json_encode (array ("code" => 300);} els json_encode (array ("code" => 400));}Приведенное выше резюме простого обучения и использования обещания JavaScript - это весь контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.