Al usar jQuery, sabía que la promesa es un modo de modo de programación asíncrono JS, pero no entendí la diferencia entre él y el objeto diferido de JQuery. A medida que avanza el proyecto de la compañía, tenemos que recibir datos del backend, por lo que decidimos hacerlo.
Promesa
Promise es un modo que opera eventos asincrónicos en forma de operaciones sincrónicas, evitando la capa por capa de anidación, y puede operar eventos asíncronos en cadenas.
Sabemos que al escribir el código asíncrono de JavaScript, la devolución de llamada es el mecanismo más fácil, pero si usa este mecanismo, debe sacrificar el flujo de control, el manejo de excepciones y la semántica de funciones, e incluso dejar que caigan en un pozo de devolución de llamada, y la promesa resuelve este problema.
En ES6, los Angularjs incorporados Q En Promise, AngularJS, y cuando usan promesas/A especificaciones, de la siguiente manera:
Cada tarea tiene tres estados: pendiente, cumplido y fallido.
1. Estado de Percado: Puede hacer la transición al Estado de cumplimiento o rechazo.
2. Estado lleno: no se puede cambiar a ningún otro estado, y el estado no se puede cambiar, y debe haber un valor de valor.
3. Estado rejuguido: no se puede cambiar a ningún otro estado, y el estado no se puede cambiar, debe haber una razón.
La transferencia de estado es una vez. Una vez que el estado se cumple (completado) o fallido (fallido/rechazado), no puede cambiar más.
La copia del código es la siguiente:
función okTogreet (nombre) {
nombre de retorno === 'Robin Hood';
}
función asyncgreet (nombre) {
var diferido = $ q.defer ();
setTimeOut (function () {
// Debido a que esta función asincrónica FN se ejecuta en el futuro asincrónicamente, envolvemos el código en la llamada $ aplicada, mientras observamos correctamente el cambio en el modelo
$ alcance. $ Aplicar (function () {
diferido.notify ('a punto de saludar' + nombre + '.');
if (okToGreet (nombre)) {
diferido.resolve ('hola', + nombre + '!');
} demás {
diferido.reject ('Saludo' + nombre + 'no está permitido.');
}
});
}, 1000);
regresar diferido.promise;
}
var promise = asyncgreet ('Robin Hood');
Promise.Then (función (saludo) {
alerta ('éxito:' + saludo);
}, función (razón) {
alerta ('fallido:' + razón);
}, función (actualización) {
alerta ('recibió notificación:' + actualización);
});
Uso básico de la promesa Q
El código anterior muestra el papel de varios métodos de instancias defferidas creadas por $ q.defer (). Si la operación asincrónica es exitosa, el estado del objeto prometedor se cambia a "éxito" (es decir, de pendiente a resuelto); Si la operación asíncrona fallas, el estado se cambia a "fallado" (es decir, de pendiente a rechazado). Finalmente, regrese diferido.
JS tendrá una promesa nativa, ya hay objetos prometedores en ES6, y la API de promesa básica se implementa en las versiones beta de Firefox y Chrome 32.
$ q.defferd en angularjs
Devuelva el objeto Deffered que se llame encadenado llamando a $ Q.Defferd. Este objeto asocia a los tres estados de tarea en la especificación de promesas/a a través de la API.
API definido
Método de objeto Deffered
1.RESOLVE (VALOR): en la declaración de la declaración (), indica que el objeto de promesa cambia del estado pendiente a resolver.
2.REject (razón): en la declaración de la declaración (), indica que el objeto de promesa cambia del estado pendiente a rechazado.
3.notify (valor): en la declaración notificar (), indica que el estado no cumplido del objeto prometedor puede llamarse varias veces antes de resolver o rechazar.
Propiedades de objeto definidas
Promesa: lo último que regresa es una nueva propiedad de promesa de objeto diferido, no el objeto diferido original. Este nuevo objeto de promesa solo puede observar el estado del objeto prometedor original, y no puede modificar el estado interno del objeto diferido, lo que puede evitar que el estado de la tarea se modifique externamente.
API de promesa
Al crear una instancia diferida, se crea un nuevo objeto prometedor y la referencia se puede obtener a través de diferido.
El propósito del objeto de promesa es permitir que la parte interesada obtenga sus resultados de ejecución cuando se complete la tarea diferida.
Métodos de objetos de promesa
1.Then (ErrorHandler, FulfilledHandler, ProgressHandler): el método entonces se usa para escuchar diferentes estados de una promesa. El Mandler de error escucha al estado fallido, el cumplido Handler escucha al estado realizado y el ProgressHandler escucha al estado no cumplido. Además, la devolución de llamada de notificación puede llamarse 0 a varias veces, proporcionando una indicación de progreso antes de resolver o rechazar (resolver y rechazar).
2.Catch (ErrorCallback) - Atajo a Promise.Then (NULL, ErrorCallback)
3. Finalmente (devolución de llamada): le permite observar si una promesa es ejecutada o rechazada, pero no necesita modificar el último valor. Esto se puede usar para liberar recursos o limpiar objetos inútiles, independientemente de si la promesa es rechazada o resuelta. Para obtener más información, consulte la especificación completa de documentación.
La llamada de la cadena de promesa se puede implementar a través del método entonces ().
La copia del código es la siguiente:
prometB = promisea.then (function (resultado) {
Resultado de retorno + 1;
});
// prometB se procesará inmediatamente después de procesar Promisea,
// y su valor de valor es el resultado del aumento de las promisas en 1
Otros métodos de $ Q
$ Q. Cuando (valor): pase el valor variable, promise.then () ejecuta una devolución de llamada exitosa
$ Q.all (promesas): Las promesas múltiples deben ejecutarse con éxito antes de que puedan ejecutarse con éxito. El valor se pasa como una matriz o valor hash. Cada valor en la matriz es el objeto prometedor correspondiente al índice.