Tres estados de promesa
Tres estados de promesa
Promise es una solución para la programación asincrónica, que es más razonable y poderosa que las soluciones tradicionales: funciones de devolución de llamada y eventos. Fue propuesto e implementado por primera vez por la comunidad. ES6 lo escribió en el estándar del lenguaje, unificó su uso y proporcionó objetos Promise de forma nativa.
La llamada Promesa es simplemente un contenedor que almacena el resultado de un evento (normalmente una operación asincrónica) que finalizará en el futuro. Sintácticamente hablando, Promise es un objeto del cual se pueden obtener mensajes para operaciones asincrónicas. Promise proporciona una API unificada y varias operaciones asincrónicas se pueden procesar de la misma manera.
El objeto Promise tiene las dos características siguientes.
(1) El estado del objeto no se ve afectado por el mundo exterior. El objeto Promesa representa una operación asincrónica y tiene tres estados: Pendiente (en curso), Resuelto (completado, también conocido como Cumplido) y Rechazado (fallido). Sólo el resultado de la operación asincrónica puede determinar el estado actual y ninguna otra operación puede cambiar este estado. Este es también el origen del nombre Promise. Su significado en inglés es "compromiso", lo que significa que no se puede cambiar por otros medios.
(2) Una vez que el estado cambia, no volverá a cambiar y este resultado se puede obtener en cualquier momento. Sólo hay dos posibilidades para que cambie el estado de un objeto Promesa: de Pendiente a Resuelto y de Pendiente a Rechazado. Mientras ocurran estas dos situaciones, el estado se solidificará y no volverá a cambiar, y siempre mantendrá este resultado. Si el cambio ya ocurrió, si agrega una función de devolución de llamada al objeto Promise, obtendrá el resultado inmediatamente. Esto es completamente diferente a un evento. La característica de un evento es que si te lo pierdes y lo vuelves a escuchar, no obtendrás el resultado.
Con el objeto Promise, las operaciones asincrónicas se pueden expresar como un proceso de operación sincrónica, evitando capas de funciones de devolución de llamada anidadas. Además, los objetos Promise proporcionan una interfaz unificada, lo que facilita el control de las operaciones asincrónicas.
La promesa también tiene algunas desventajas. En primer lugar, la Promesa no se puede cancelar una vez creada, se ejecutará inmediatamente y no se puede cancelar a mitad de camino. En segundo lugar, si no configura una función de devolución de llamada, los errores generados internamente por Promise no se reflejarán externamente. En tercer lugar, cuando se encuentra en el estado Pendiente, es imposible saber en qué etapa se encuentra el progreso actual (recién comenzando o a punto de completarse).
Si ciertos eventos ocurren repetidamente, en términos generales, usar el patrón Stream es una mejor opción que implementar Promise.