Promise es una clase proporcionada por ES6. Es una solución para la programación asincrónica. No se refiere a un método de conversión de asincrónico a sincrónico . El propósito es escribir tareas asincrónicas complejas de manera más elegante.
ventaja
1. El estado del sujeto no se ve afectado por el mundo exterior
Tres estados pendientes: en progreso cumplido: rechazado con éxito: fallido Promesa significa promesa, ¿qué significa promesa? Es decir, solo el resultado de la operación asincrónica puede determinar el estado actual, y ninguna otra operación puede cambiar este estado.
2. Una vez que se cambia el estado, no volverá a cambiar y el resultado se puede obtener en cualquier momento
Solo hay dos casos para el cambio de estado de la Promesa: pendiente a cumplida y pendiente a rechazar
Mientras ocurran estas dos situaciones, el estado no cambiará y el resultado siempre se mantendrá. En este momento, se llama resuelto (finalizado), y este resultado se puede obtener agregando una función de devolución de llamada al objeto Promise ( a diferencia de los eventos, eventos Si te lo pierdes y vuelves a escuchar, no obtendrás ningún resultado)
Desventaja
1. La promesa no se puede cancelar
Una vez creado, debe ejecutarse inmediatamente y no se puede cancelar a la mitad.
2. Juicio incorrecto
Si la función de devolución de llamada no está configurada, el error arrojado dentro de la Promesa no se reflejará en el exterior
3. Estado impredecible
Cuando está en estado pendiente, es imposible saber a qué estado está progresando actualmente, si acaba de comenzar o está a punto de completarse.
Uno, construir Promesa
gramática
newPromise(function(resolve, reject){
// to do...});
El constructor Promise tiene solo un parámetro, que es una función . Esta función se ejecutará de forma asincrónica directamente después de la construcción, por lo que la llamamos función de inicio. La función de inicio contiene dos parámetros: resolver y rechazar. Cuando se construye la Promesa, la función de inicio se ejecutará de forma asincrónica
Tanto resolver como rechazar son funciones (proporcionadas por el motor de JavaScript, no es necesario que las implemente usted mismo), en las que resolver significa que todo es normal, es decir, se llama cuando la función asincrónica se opera con éxito, y el resultado de la operación asincrónica se pasa como un parámetro y el rechazo es cuando ocurre una excepción La llamada se llama cuando falla la operación asincrónica y el error reportado por la operación asincrónica se pasa como un parámetro
Puede colocar un parámetro en resolve () para pasar un valor al siguiente then, y la función en then también puede devolver un valor para pasar a then, pero si lo que se devuelve en then es un objeto Promise, entonces el siguiente entonces será Ser equivalente Operar en la Promesa devuelta
El parámetro de rechazo () generalmente pasa una excepción a la función de captura posterior para manejar la excepción
El alcance de resolver y rechazar es solo la función inicial, excluyendo entonces y otras secuencias
resolver y rechazar no puede detener la función de inicio, debe usar return
Dos, método de promesa
1. luego ()
entonces () puede agregar la función en el parámetro a la secuencia de ejecución normal de la Promesa actual
La función pasada en then () se ejecutará en secuencia, y cualquier excepción saltará directamente a la secuencia de captura
Cómo interrumpir el bloque then: El bloque then se ejecutará en orden descendente de forma predeterminada, el retorno no se puede interrumpir y se puede interrumpir saltando para atrapar lanzando
El bloque then se puede usar varias veces, pero el bloque catch solo ejecutará el primero a menos que haya una excepción en el bloque catch, por lo que es mejor organizar solo un catch y finalmente bloquear
Cuando necesitamos llamar a una tarea asincrónica, necesitamos escribir otro entonces en lugar de programar en el entonces actual
2. atrapar ()
catch () es para establecer la secuencia de manejo de excepciones de Promise
3. finalmente ()
finalmente () es una secuencia que debe ejecutarse al final de la ejecución de la Promesa
La secuencia de entonces, captura y finalmente se puede invertir, pero esto no es recomendable. Es mejor escribir el programa en el orden de entonces-captura-finalmente
Tres, función cascada
El programa implementado con "función cascada" es un asunto particularmente engorroso para el mantenimiento o manejo de excepciones, y hará que el formato de sangría sea muy redundante.
Con el objeto Promise, podemos expresar operaciones asincrónicas en un proceso de operación síncrona, evitando así funciones de devolución de llamada anidadas. Además, el objeto Promise proporciona una interfaz unificada, lo que facilita el control de operaciones asincrónicas
Una función asincrónica es una función que se ejecuta de forma asincrónica a través de un bucle de eventos y devuelve una Promesa implícita como resultado.
La instrucción de espera se puede utilizar en la función asíncrona función asíncrona. La instrucción de espera debe ir seguida de una Promesa . La función asíncrona se detendrá durante la operación de la Promesa y continuará ejecutándose hasta el final de su operación. Es decir, el await La instrucción suspende la ejecución de la función asíncrona y espera la ejecución de la Promesa. Se devuelve el resultado. Una vez que se devuelve el resultado, se reanuda la ejecución de la función asíncrona y la instrucción de espera solo es válida en funciones asíncronas. Si se utiliza fuera de la función asincrónica, se producirá un error de sintaxis
2. El bloque try-catch maneja excepciones.
Devuelve un objeto de promesa y devuelve el valor de la función asincrónica (si la función asincrónica es resolver, devuelve el valor de la resolución; si se lanza una excepción, lanza la excepción de rechazo declarada en la función asincrónica)
asyncfunctiontestA(){
try{
awaitnewPromise(function(resolve, reject){
reject("may");})}catch(e){
console.log(e);}}testA();// 返回正常值asyncfunctiontest(){
let t =awaitnewPromise(function(resolve, reject){
resolve("day");})
console.log(t);}test();