Resuelva que la función de devolución de llamada sea demasiado profunda, y la lógica paralela debe ejecutarse en serie. Una promesa representa el resultado final de una operación asincrónica. La forma principal de interactuar con Promise es registrar la función de devolución de llamada a través de su método entonces () para recibir el valor de resultado final de la promesa.
Los protocolos relacionados con la promesa incluyen Promisea y Promisea+
Definir una promesa de clase
Defina la cola de cola de atributos, inicialice la matriz vacía []
Definir el valor del valor de la propiedad, inicializar nulo
Definir el estado de estado de la propiedad e inicializar "pendiente" (valor predeterminado)
Definir el método del miembro getQueue (), return atribute Queue
Definir el método de miembro getStatus (), devuelve el estado del atributo
Definir el método de miembro setstatus (), establecer el estado, pasar los parámetros: estado, valor
Determinar que el estado se cumple o rechaza,
Establecer la propiedad de estado this.status = status
Establezca la propiedad de valor this.value = valor || nulo, si no pasa el valor, es nulo
Defina el congelador de la variable congelada
Definir el método de miembro es fullfilled () para determinar si el estado actual está (completado)
Definir el método de miembro isrejected () para determinar si el estado actual está (fallido)
Definir el método de miembro ispending (), determine que el maestro de estado actual es (esperando)
Definir el método de miembro entonces (), Pase los parámetros: devolución de llamada exitosa exitosa, OnRejed fallida de devolución de llamada
Definir dos funciones de devolución de llamada: objeto de controlador, atributo cumplido, rechazado
Definir la propiedad diferida del objeto del controlador, el objeto diferido
Determine si el estado actual está esperando. Si está esperando, coloque el objeto del controlador en la matriz de cola de cola
Si no es un estado de espera, llame al método del procedimiento () del objeto Utils, parámetro: estado,
Return handler.deferred.promise Object
Defina una clase diferida
Definir la promesa de atributo e inicializar el objeto de promesa
Definir el método miembro resuelve (), pasar el parámetro: resultado del resultado
Determine el estado del objeto de promesa como espera y regresa directamente
Llame al método getqueue () del objeto de promesa para obtener la matriz de colas
Matriz de bucle
// TODO llama a la clase de herramientas utiliza. Método de procedimiento (), Parámetros: "Fulfado", Elemento, INFORMACIÓN ERR
Llame al método setstatus () del objeto prometedor, establezca el estado, los parámetros: 'cumplido', resultado
Definir el método del miembro rechazar, pasar el parámetro: mensaje de error ERR
Determine el estado del objeto de promesa como espera y regresa directamente
Llame al método getqueue () del objeto de promesa para obtener la matriz de colas
Matriz de bucle
// TODO, llame a la clase de herramientas utilizados. Método de procedimiento (), parámetros: "rechazado", elemento, información errante
Llame al método setstatus () del objeto prometedor, establezca el estado, los parámetros: 'cumplido', resultado
Definir los utilizados de la clase de herramientas, ejecutarlo inmediatamente usando funciones anónimas y obtener un objeto
Devuelve el objeto, hay un procedimiento de método () en el objeto
Definir el método del procedimiento (), los parámetros de aprobación: tipo de estado de tipo, matriz de procesadores de controlador, resultado del resultado
Obtenga la función de procesamiento func, en el controlador [tipo]
Estaba mareado cuando llegué aquí. . .
Cómo usar:
Definir una función Ajax, pasar el parámetro: ruta de URL
Obtenga el objeto diferido y salga nuevo
El código de AJAX para solicitar datos, en el método de devolución de llamada que devuelve datos
Si el método resolve () del objeto diferido se llama con éxito, parámetro: return data
Si el método rechazar () del objeto diferido se llama fallado, parámetro: datos devueltos
Devuelve el objeto diferido.
Llame al método ajax () para obtener el objeto Promise, Parámetro: URL,
Llame al método entonces () del objeto prometedor, parámetros: función anónima
Llame al método AJAX () para obtener el objeto Promise y devolver este objeto
Formar una llamada en cadena
JS PARTE:
<script> // Promise Code Part (elegí el cinturón de perro) promise = function () {this.queue = []; this.Value = null; this.Status = 'Pending'; // Pending Fulfilled rechazado}; promise.prototype.getqueue = function () {return this.queue;}; promise.prototype.getStatus = function () {return this.status;}; promise.prototype.setStatus = function (s, valor) {if (if========== {this.status = s; this.value = valor || nulo; this.queue = []; var congeleObject = object.freeze || función(){}; congeleObject (this); // El estado de la promesa es irreversible} else {tirar un nuevo error ({Mensaje: "No es compatible con el estado:" + S}); }}; Promise.prototype.isfulfilled = function () {return this.status === 'Fulfilled';}; promise.prototype.isrejected = function () {return this.Status === 'rechazado';} promise.prototype.ispending = function () {return this.status === 'pending';} promety.prototy function (onfullfilled, onrejected) {var handler = {'Fulfilled': Onfullfilled, 'rechazado': onrejed}; handler.deferred = new DeFerred (); if (! this.ispending ()) {// Esto puede cambiar primero el estado de la promesa y luego agregar devoluciones de llamada utils.procedure (this.status, handler, this.value); } else {this.queue.push (handler); // luego se puede llamar varias veces en la misma promesa; especificación 2.2.6} return handler.deferred.promise; // entonces debe devolver una promesa; especificación 2.2.7}; var utils = (function () {var MakeignAler = function (defered, type) {function de retorno) procedimiento = function (type, handler, resultado) {var func = handler [type]; newResult.then (function (data) {// def.resolve (data); //}, function (err) {// def.reject (err); //}); // si se cumple x, cumpla con el mismo valor. transición (def, 'rechazado', err); {tirar nuevo error ({'Mensaje': "No admite el tipo:" + tipo}); } var queue = this.promise.getqueue (); for (var i = 0, len = queue.length; i <len; i ++) {utils.procedure ('Fulfilled', queue [i], resultado); } this.promise.setStatus ('Fulfilled', resultado);}; 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 ('rechazado', queue [i], err); } this.promise.setStatus ('Rechazado', err);}/*********************************************************************************** /// Test Ajax = function (url) {var def = new deferred (); var xhr = new xmlhttprequest (); xhr.onreadyStateChange = function () {if (xhr.readyState === 4) {if ((xhr.status> = 200 && xhr.status <300) || xhr.status ==== 304) {def.resole (xhr.responsetext)} más Error ({mensaje: xhr.status})); }}}}}; xhr.open ('get', url, verdadero); XHR.SEND (NULL); return def.promise;} aJax ('test.php? Act = 1'). Entonces (function (data1) {console.log (data1); // manejar data1 return ajax ('test.php? act = 2');}). entonces (function (data2) {console.log (data2); // data2 return aJax ('test.php? {console.error (err);}). entonces (function (data3) {console.log (data3); alerta ('éxito');}, function (err) {console.error (err);}); </script>PHP:
<? phpif ($ _ get ['act'] == 1) {echo json_encode (array ("código" => 200));} else if ($ _ get ['act'] == 2) {echo json_encode (array ("código" => 300));} else if ($ _ get ['acto'] == 3) {cleCoCo) json_encode (array ("código" => 400));}El resumen anterior del simple aprendizaje y uso de JavaScript Promise es todo el contenido que comparto con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.