Hablemos sobre qué promesa es y qué $ Q es el primero. Promise es un modo de procesamiento asincrónico, con muchos métodos de implementación, como el famoso Q y JQuery de Kris Kwal.
Que es la promesa
Aquellos que han aprendido sobre Ajax antes pueden experimentar el dolor de las devoluciones de llamada. El código sincrónico es fácil de depurar, pero el código de devolución de llamada asíncrono hará que los desarrolladores caigan en un atolladero y no se pueden rastrear, como:
FUNA (arg1, arg2, function () {Funcb (arg1, arg2, function () {func (arg1, arg2, function () {xxxx ......})})})})La anidación en sí misma ya es difícil de entender, y además, la devolución de llamada se activará en algún tiempo desconocido, lo cual es equivalente a agregar insulto a la lesión.
Sin embargo, con la especificación de promesa, puede ayudar a los desarrolladores a escribir código asincrónico de manera sincrónica, como en AngularJS:
Deferabc.resolve (xxx)
.Then (funcsuccess () {}, funcerRor () {}, funcnotify () {});
Cuando el objeto en resolución se ejecuta con éxito, se activará funcsuccess, y si falla, Funcerror se activará. Un poco similar
Deferabc.resolve (function () {sunccess: funcsuccess, error: funcerror, notify: funcnotify})Para decirlo sin rodeos, Promise es una pre-definición de resultados de ejecución inciertos. Si tiene éxito, será xxxx; Si falla, será xxxx, al igual que dar algunas promesas por adelantado.
Por ejemplo, Xiaobai era muy vago cuando estaba en la escuela. Siempre le pidió a su compañero de cuarto que trajera comida y le dijo por adelantado que si había puerros y huevos, compraría esta verdura, de lo contrario compraría huevos fritos con tomates; No importa si podría comprarlos, debería recordar traer un paquete de cigarrillos.
Xiaobai le pidió a su compañero de cuarto que trajera comidas ()
. Luego (huevos de puerro, huevos revueltos con tomates)
.finalmente (con un paquete de cigarrillos)
Servicio de $ Q
El servicio Q es una implementación prometedora implementada por sí misma en AngularJS, que es mucho más ligero que el Q.
Permítanme presentar primero varios métodos de $ Q:
Difer () crea un objeto diferido, que puede ejecutar varios métodos de uso común, como resolver, rechazar, notificar, etc.
All () pasa en la matriz de promesas, se ejecuta en lotes y devuelve un objeto de promesa
Cuando () pasa en un parámetro incierto, si cumple con el estándar de promesa, devuelve un objeto de promesa.
En promesa, se definen tres estados: estado de espera, estado de finalización y estado de rechazo.
Hay varias regulaciones con respecto al estado:
1 Los cambios en el estado son irreversibles
2 El estado de espera puede ser completo o rechazado
Método de diferir ()
En $ Q, puede usar el método Resolve para convertirse en el estado de finalización; Use el método de rechazo para convertirse en el estado de rechazo.
Echemos un vistazo al uso simple de $ Q:
<html ng-app = "myApp"> <head> <meta http-equiv = "content-type" content = "text/html; charset = utf-8"/> <script src = "http://apps.bdimg.com/libs/angular.js/1.2.16/angular.min.js"> <s script " ng-Controller = "myctrl"> {{test}} </div> <script type = "text/javascript"> var myAppModule = angular.module ("myApp", []); myAppModule.Controller ("myctrl", ["$ scope", "$ q", function ($ scope, $ q) {$ scope.test = 1; // Esto solo se usa para probar si AngularJS es normal, y no tiene otra función var defer1 = $ q.defer (); var promet1 = defer1.pomise; promise1 .then (función (valor (valor) promise1 --- success"); console.log(value); },function(value){ console.log("in promise1 --- error"); console.log(value); },function(value){ console.log("in promise1 --- error"); console.log(value); },function(value){ console.log("in promise1 --- error"); console.log (valor); console.log (valor); </script> </body> </html>Donde Difer () se usa para crear un objeto diferido, Difer.promise se usa para devolver un objeto prometedor para definir el método entonces. Hay tres parámetros en entonces, a saber, devolución de llamada exitosa, devolución de llamada fallida y devolución de llamada de cambio de estado.
La variable o función aprobada en resolución devolverá el resultado y se considerará como el parámetro del primero y luego el método. Luego, el método devuelve un objeto de promesa, por lo que se puede escribir como
xxxx
. Entonces (A, B, C)
. Entonces (A, B, C)
. Entonces (A, B, C)
.atrapar()
.finalmente()
Sigamos hablando del código anterior, entonces ... atrapar ... finalmente piense en el intento ... atrapar ... finalmente en Java.
Método all ()
Este método All () puede combinar múltiples primizas en una. Cuando todas las promesas se ejecutan con éxito, la devolución de llamada posterior se ejecutará. Los parámetros en la devolución de llamada son el resultado de cada ejecución de la promesa.
Este método se puede usar cuando algunos métodos se ejecutan en lotes.
var funca = function () {console.log ("funca"); regresar "Hola, Funa"; } var funcb = function () {console.log ("funcb"); regresar "hola, funb"; } $ Q.ALL ([FUNCA (), func ()]) .Then (function (resultado) {console.log (resultado);});Resultados de la ejecución:
funca
fúncb
Array ["Hola, Funa", "Hola, funb"]
When () Método
Cuando el método se puede pasar un parámetro, que puede ser un valor, y puede ser un objeto externo que cumpla con el estándar de promesa.
var funca = function () {console.log ("funca"); regresar "Hola, Funa"; } $ Q.When (funca ()) .then (function (resultado) {console.log (resultado);});Este método se puede usar cuando los parámetros pasados son inciertos.
Hola, Funa
Lo anterior es una introducción detallada a la información sobre la promesa --- $ Q Servicio en AngularJS. Continuaremos agregando información relevante en el futuro. ¡Gracias por su apoyo para este sitio!