Saltar al contenido

¿Qué es una ZoneAwarePromise?

Después de tanto luchar hemos encontrado la contestación de este conflicto que agunos usuarios de nuestro sitio tienen. Si deseas compartir algún detalle puedes dejar tu información.

Solución:

Angular se basa en gran medida en zone.js para mantener un contexto de ejecución en tareas asincrónicas. Está envuelto en un servicio inyectable llamado NgZone.

Estas zonas envuelven objetos JS comunes destinados a ejecutar tareas asíncronas, que incluyen promesas. Esto se mantiene en un Zone como Tarea, MicroTarea, etc.

A ZoneAwarePromise sigue siendo funcionalmente idéntico a una Promesa normal, pero internamente se mantiene al tanto de una Zoneel contexto de ejecución de , y el Zone puede saber cuándo se completa esa Promesa.

En Angular, este contexto de ejecución casi siempre significa ejecutar la detección de cambios.

Usamos Angular porque solo podemos cambiar el modelo y actualizará la vista automáticamente para nosotros, según las plantillas declarativas que proporcionamos a través de los metadatos.

La forma en que Angular maneja esto es interceptando tres tipos de eventos:

  • eventos de usuario (como clics),
  • relojes (setTimeout, setInterval) y
  • la red (fetchXHR, HttpClient).

Internamente, esto se hace a través de zonas. cuando cargas setTimeouten realidad cambia el valor predeterminado setTimeout implementación con su propia implementación, pero con la misma firma. Cuando usted llama setTimeoutni siquiera eres consciente de que estás usando zonas.

En un nivel muy alto, funciona más o menos así:

const originalSetTimeout = window.setTimeout
window.setTimeout = (fn, time) => 
  originalSetTimeout(() =>  fn(); updateView() , time)

Prácticamente solo ejecuta su función como de costumbre y luego llama a otra cosa, que Angular usa para actualizar la vista.

ZoneAwarePromise es solo una forma de usar Promise entonces esa zona es consciente de eso Puede encontrar detalles de implementación en el código fuente de Zone.js, pero esa es la esencia.

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *