¡Acerca de Promise! ¿Entiendes todo?

Promise es simplemente un contenedor que contiene el resultado de un evento (generalmente una operación asincrónica) que terminará en el futuro. Hablando sintácticamente, Promise es un objeto que puede obtener mensajes de operaciones asincrónicas; Promise proporciona una API unificada y varias operaciones asincrónicas pueden procesarse de la misma manera. Copiar codigo

1. Los objetos de promesa tienen dos características principales:

1) El estado del objeto no se ve afectado por el mundo exterior. El objeto Promise representa una operación asincrónica. Hay tres estados: pendiente (en progreso), cumplido (exitoso) y rechazado (fallido). 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 cambie el estado, no volverá a cambiar, y este resultado se puede obtener en cualquier momento. Solo hay dos posibilidades para que cambie el estado de un objeto Promise: de pendiente a cumplido y de pendiente a rechazado. Mientras ocurran estas dos situaciones, el estado se congelará y no cambiará más, y este resultado siempre se mantendrá, en este momento se le llama resuelto (finalizado). Si se ha producido el cambio, agrega una función de devolución de llamada al objeto Promise y obtendrá este resultado de inmediato. Esto es completamente diferente a un evento, la característica de un evento es que si te lo pierdes, puedes escucharlo y no obtendrás resultados. Copiar codigo

2. Promesas de desventajas:

1) La promesa no se puede cancelar. Una vez creada, se ejecutará inmediatamente y no se puede cancelar a la mitad; 
2) Si la función de devolución de llamada no está configurada, los errores arrojados en la Promesa no se reflejarán en el exterior. 
3) Cuando está en estado pendiente, es imposible saber en qué etapa se encuentra actualmente (recién iniciado o próximo a completarse). Copiar codigo

3. Uso de la promesa:

1) El objeto Promise es un constructor para generar instancias de Promise;

const KKBpromise = new Promise (función (resolver, rechazar) { 
  // ... algún código 

  si (/ * La operación asíncrona se realizó correctamente * /) { 
    resolver (valor); 
  } else { 
    rechazar (error); 
  } 
});

El constructor Promise acepta una función como parámetro y los dos parámetros de la función son resolver y rechazar. Son dos funciones, proporcionadas por el motor de JavaScript, por lo que no es necesario que las implemente usted mismo.

La función de la función de resolución es cambiar el estado del objeto Promise de "inacabado" a "exitoso" (es decir, de pendiente a resuelto), llamado cuando la operación asincrónica tiene éxito, y pasar el resultado de la operación asincrónica como parámetro; rechazar La función de la función es cambiar el estado del objeto Promise de "inacabado" a "fallido" (es decir, de pendiente a rechazado), llamado cuando falla la operación asincrónica, y pasar el error reportado por la operación asincrónica como parámetro.

Una vez generada la instancia de Promise, puede utilizar el método then para especificar las funciones de devolución de llamada para el estado resuelto y el estado rechazado respectivamente. Regala una castaña:

KKBpromise.then (función (valor) { 
  // éxito 
}, función (error) { 
  // fracaso 
}); 复制 代码

El método then puede aceptar dos funciones de devolución de llamada como parámetros. La primera función de devolución de llamada se llama cuando el estado del objeto Promise se resuelve, y la segunda función de devolución de llamada se llama cuando el estado del objeto Promise se rechaza. Entre ellos, la segunda función es opcional y no es necesario proporcionarla. Ambas funciones aceptan el valor pasado por el objeto Promise como parámetro.

function pros (ms) { 
  return new Promise ((resolver, rechazar) => { 
    setTimeout (resolver, ms, 'hecho'); 
  }); 
} 
pros (100). then ((valor) => { 
  consola.log (valor); 
}); 复制 代码

El método pros devuelve una instancia de Promise, que representa un resultado que sucederá después de un período de tiempo. Después del tiempo especificado (parámetro ms), el estado de la instancia de Promise se resuelve y se activa la función de devolución de llamada vinculada al método then.

2) La promesa se ejecutará inmediatamente después de su creación. por ejemplo:

dejar promesa = nueva promesa (función (resolver, rechazar) { 
  console.log ('Pro'); 
  resolver (); 
}); 
promesa.entonces (función () { 
  consola.log ('resuelto'); 
}); 
console.log ('¡Hola, Promesa!'); 
// Pro 
// ¡Hola, promesa! 
// resuelto 复制 代码

Promise se ejecuta inmediatamente después de la creación, por lo que el primer resultado es Promise. Luego, la función de devolución de llamada especificada por el método then se ejecutará después de que se ejecuten todas las tareas de sincronización del script actual, por lo que la salida se resuelve al final.

A veces, después de llamar a resolver o rechazar, la misión de Promise se completa. Las operaciones posteriores deben colocarse en el método then y no deben escribirse directamente después de resolver o rechazar. Por lo tanto, es mejor agregar una declaración de devolución delante de ellos para que no haya sorpresas.

new Promise ((resolver, rechazar) => { 
  return resolve (1); 
  // La siguiente declaración no se ejecutará 
  console.log ('Siguiente ejecución'); 
})

4. Promesa API de uso común:

1) El método Promise.all () devuelve un nuevo objeto de promesa, que desencadenará el éxito cuando todos los objetos de promesa tengan éxito, y una vez que alguno de los objetos de promesa en él falle, la falla del objeto de promesa se activará inmediatamente . Después de que este nuevo objeto de promesa activa el estado de éxito, tomará una matriz que contiene todos los valores de retorno de la promesa como el valor de retorno de la devolución de llamada de éxito, y el orden es consistente con el orden de los parámetros; si este nuevo objeto de promesa activa el estado de error, lo hará El mensaje de error del primer objeto de promesa que desencadenó el error se utiliza como su mensaje de error de error. El método Promise.all se usa a menudo para manejar la colección de estados de múltiples objetos de promesa.

let kkb1 = new Promise ((resolver, rechazar) => { 
 resolver ('kkb1') 
}) 

let kkb2 = new Promise ((resolver, rechazar) => { 
 resolver ('kkb2') 
}) 

dejar kkb3 = Promse.reject ('Falló') 


Promise.all ([kkb1, kkb2]). 
 Then ((result) => { 
   console.log (result) // ['exitoso kkb1', 'exitoso kkb2'] 
 } ) 
 .catch ((error) => { 
   console.log (error) 
 }) 


Promise.all ([kkb1, kkb3, kkb2]). 
 then ((resultado) => { 
   console.log (resultado) 
 }) 
 .catch ( (error) => { 
   console.log (error) // 'Falló' 
 })

2) El uso de Promise.race es similar al de todos. El método Promse.race, como su nombre indica, significa raza, lo que significa que si el resultado en Promise.race ([kkb1, kkb2, kkb3]) se obtiene rápidamente, ese resultado se devolverá, independientemente de si el resultado en sí es un estado de éxito o un estado de fracaso.

let kkb1 = new Promise ((resolver, rechazar) => { 
  setTimeout (() => { 
    resolver ('kkb1') 
  }, 1000) 
}) 
 
let kkb2 = new Promise ((resolver, rechazar) => { 
  setTimeout (( ) => { 
    rechazar ('kkb2') 
  }, 500) 
}) 
 
 
Promise.race ([kkb1, kb2]). 
  then ((result) => { 
    console.log (result) 
  }). catch ((error) = > { 
    console.log (error) // imprime kkb2 porque es rápido 
  })

Supongo que te gusta

Origin blog.51cto.com/15069732/2575865
Recomendado
Clasificación