Libro breve "Promesa"
¿Qué es un compromiso?
1. Se utiliza principalmente para cálculos asincrónicos
2. Las operaciones asincrónicas se pueden poner en cola, ejecutarse en el orden requerido y devolver los resultados esperados
3. Las promesas pueden ser pasado y manipulado entre objetos para ayudarnos a lidiar con las colas
¿Por qué necesitamos promesas?
Para evitar congelar interfaces (tareas)
Sincronización: Supongamos que vas a un restaurante, buscas una mesa, llamas al camarero y el camarero te dice: "Lo siento, estoy Como camarero "sincrónico", debo servir a esta mesa de invitados antes de saludarte. Esta mesa de invitados obviamente ya ha comido, pero tú acabas de pedir un menú. Por un gesto tan pequeño, el camarero te pidió que esperaras el de otra persona. comida Solo después de que se complete la gran acción podemos venir a saludarlo. Este es el problema de la sincronización: es decir, "1234 del trabajo entregado en orden deben completarse en orden"
Asincrónico: después. el sistema completa el trabajo anterior, entregue el trabajo de larga duración de la entrega A al sistema y deje que el sistema continúe haciendo el trabajo de la entrega B. Cuando el sistema complete el trabajo anterior, continuará completando el trabajo restante de A. a través de devoluciones de llamada o eventos
El orden en que se completa el trabajo AB no tiene nada que ver con el orden en que se entrega el trabajo, por lo que se llama "asíncrono"
El rol. El método de resolución es cambiar el estado del objeto Promise de incompleto a exitoso (es decir, de pendiente a exitoso resuelto), se llama cuando la operación asincrónica tiene éxito y el resultado de la operación asincrónica se pasa como parámetro.
rechazar cambia el estado del objeto Promise de "incompleto" Cambiar a "fallido" (es decir, cambiar de pendiente a rechazado) y ser llamado cuando la operación asincrónica falla, pasando el resultado de la asincrónica. operación como parámetro
1. pendiente
2. .cumplido
3. rechazado
Cuando el estado de la promesa cambia, el la función de respuesta en then() se activará para manejar los pasos posteriores;
Una vez que se produce un cambio en el estado de la promesa, la función de respuesta en then() se activará para manejar los pasos posteriores. , no volverá a cambiar
Solo hay dos cambios posibles en el estado del objeto de promesa:
p>De Pendiente a Realizado
De Pendiente. a Rechazado
No importa cuál de estas dos situaciones ocurra, el estado se solidificará y no volverá a cambiar
1. Ejecución por lotes de Promise.all()
<. p> Promise.all([p1, p2, p3]) se usa para obtener múltiples instancias de Promise y encapsularlas. Para una nueva instancia de Promise, la instancia devuelta es solo una Promise normalAcepta una matriz como un parámetro
La matriz puede ser un objeto Promise u otro valor,
Solo Promise espera a que cambie el estado
Cuando se completan todas las subpromesas, la Promesa se completa y el valor de retorno es el valor completo de la matriz
Cuando cualquiera de las subpromesas falla, la Promesa falla. El valor de retorno es el resultado de la primera Promesa secundaria fallida.
Uso común:
Combina operaciones asincrónicas y temporizadores. Si el temporizador se activa primero, se considerará un tiempo de espera y se notificará al usuario. Por ejemplo, necesitamos cargar los recursos de la página de inicio desde el servicio remoto. Si la carga no se completa dentro de 5000 ms, notificaremos al usuario del error de carga
2. Promise.race ()
Similar a Promise.all, pero esperará la primera promesa establecida y obtendrá el resultado (o error).
3. Promise.allSettled()
Espera a que se resuelvan todas las promesas, independientemente del resultado. La matriz de resultados incluye:
4.Promise.resolve()
Promise.resolve(value) crea una promesa resuelta con el valor del resultado.
5.Promise.reject()
Promise.reject(value) creará una promesa rechazada con el valor del resultado.
Uso real
Las devoluciones de llamada están encapsuladas con Promise, que tiene dos beneficios obvios: