El nuevo estándar agrega promesa nativa.
Aquí solo discutiremos el uso de cadenas y pensaremos en los detalles.
1. Revisión de entonces () y Catch ()
La función de devolución de llamada se puede colocar en los parámetros de entonces () y atrapar () para recibir el resultado final de una promesa.
Entonces () puede recibir un parámetro, entonces esta devolución de llamada solo se llamará cuando Promise Resolve ().
Entonces () también puede recibir un segundo parámetro, y la segunda devolución de llamada se usa para manejar la situación de Promise RechEn ().
Catch () maneja específicamente la situación prometida rechazar ().
En otras palabras, entonces () se puede usar en ambas formas, y Catch () solo puede manejar rechazar (). Sin embargo, se recomienda usar () para manejar la resolución () y atrapar () para manejar rechazar ().
2. Sin embargo, de lo que quiero hablar no es lo anterior. Lo anterior es solo una revisión del uso básico. Aquí comenzaremos con los detalles de los valores de retorno y el uso de la cadena del método entonces () y entonces ().
Luego, la documentación oficial dice que tanto () como para atrapar () devuelven una promesa, lo cual es muy intrigante. (Soy un novato en JS, y nunca he estado expuesto a promesas anteriores en la naturaleza).
En primer lugar, esta promesa recién devuelta no es la promesa original;
En segundo lugar, el cambio en el estado de la promesa recién devuelta (resolución () o rechazar ()) está relacionado con el estado de la promesa anterior y cómo se usa entonces ().
Primero explique la situación de entonces (): (la captura es similar)
var p1 = promet.resolve ("éxito"); var p2 = p1.then (tarea1); var p3 = p2.then (tarea2);Nota: La tarea 1 y la tarea 2 son las dos devoluciones de llamada.
Aquí, P1 es una promesa creada y resuelve directamente ();
P2 es una promesa obtenida con entonces (), y P3 también es una promesa obtenida con entonces ().
Entonces, ¿cómo cambia el estado de P2 y qué pasa con P3?
Voy a usar la siguiente figura para explicar este concepto:
en,
1. Un octágono representa un objeto de promesa.
2. El círculo representa el estado dentro de una promesa, y la flecha negra representa el cambio de estado.
3. La flecha derecha representa llamar a la función entonces.
4. Es decir, mientras se llame la función entonces, se generará un nuevo objeto prometedor.
5. Al llamar a la función entonces, ¿no sabe cuál es el estado del objeto de promesa anterior, si está pendiente o resuelto? Esto no se puede asumir y no se puede ver afuera.
6. La llamada de la función entonces no bloqueará, es decir, P2 y P3 se generan casi instantáneamente, incluso si P1 todavía está migrando lentamente su propio estado.
Sabemos que el estado de P1 está resuelto (ver el código anterior). Sin embargo, no se ha explicado aquí cómo cambian los estados de P2 y P3, ¿se resuelve o rechaza? Mira la nueva imagen a continuación.
Puedes ver más diamantes.
El diamante representa la función de devolución de llamada pasada cuando se llama. El rombo ascendente representa el proceso de aprobación en [resuelto para el objeto de promesa anterior], y el rombo descendente representa el proceso de aprobación en [rechazado para el objeto de promesa anterior].
Nota: En este ejemplo, no se pasa ningún procesamiento para rechazar, es decir, el diamante descendente no debe dibujarse en la imagen de arriba. En aras de la conveniencia, solo necesitamos saber que el diamante ascendente y descendente está relacionado con la forma en que usamos entonces o atrapamos. Echemos un vistazo al código de muestra nuevamente:
var p1 = promis.resolve ("éxito"); var p2 = p1.then (tarea1); // El rombo ascendente se genera var p3 = p2.then (tarea 2); // El rombo ascendente se generaSe puede ver que no damos el segundo parámetro de entonces, es decir, no manejamos el rechazo.
Para agregar, si desea lidiar con rechazar, puede usarlo o atrapar. Catch se usa especialmente para lidiar con el rechazo. Aparte de eso, no hay diferencia entre entonces.
1. Si el estado final de P1 (resolver o rechazar) se procesa correctamente (al llamar entonces, la devolución de llamada correspondiente se pasa, es decir, hay un diamante correspondiente), entonces el estado de P2 se cambiará para resolver.
2. Si el estado final de P1 (resolver o rechazar) no se procesa correctamente (al llamar entonces, falta la devolución de llamada correspondiente, es decir, no hay diamante correspondiente), entonces el estado de P1 se enrutará a P2 (el estado de recibir P1).
3. Pase así.
4. Este artículo no explica cómo obtener los datos finales de la última promesa en la devolución de llamada, es decir, cómo aprobar los datos, hay muchos tutoriales.
3. Aquí hay algunos ejemplos para resumir este artículo.
En la figura, se da el estado de P1 y se resuelve o rechazan. El objetivo es lanzar el estado final de P2 y P3.
Los anteriores son cuatro ejemplos independientes, sin conexión entre ellos.
X significa que P3 no usa la función de entonces o captura, por lo que no hay forma de lidiar con la resolución o rechazar.
Finalmente, si hay algún error, corríjeme a tiempo, ¡gracias! ~! ! @~~~
El artículo anterior en profundidad de la cadena JS Promise es todo el contenido que he compartido con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.