• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
    • Preguntas
    • Profesores
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Pruebas Online
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

247
Vistas
this._ngZone.onMicrotaskEmpty.first() - explicación del código

Alguien me ayudó con un problema asíncrono hace casi 2 meses, funciona muy bien (y desde entonces le agregué una asignación), pero todavía tengo este código en mi programa que no estoy completamente seguro de lo que hace.

El código original era:

 constructor(private ngZone: NgZone) { } ngOnInit() { this.getPosts() .subscribe(x => { this.apidata = x; this.ngZone.onMicrotaskEmpty.first().subscribe(() => { this.largestHeight(); }); }); }

Ahora es muy difícil obtener documentación sobre esto, y lo he intentado de vez en cuando durante los últimos 2 meses. Solo dan una definición, pero no ejemplos reales. La línea real sería this.ngZone.onMicrotaskEmpty.first().subscribe(()

1) Entonces , ngZone básicamente accede a la zona con la que está ocupado y entiendo esto al 70%

2) onMicrotaskEmpty "Notifica cuando no hay más microtareas en cola en el Turno de VM actual" .

  • a) primero, ¿VM significa "Máquina virtual"? Fue difícil obtener la definición de esto.
  • b) ¿Notifica cuando la cola de microtareas de toda la aplicación está vacía, o solo el componente? Si es toda la aplicación y también coloco este código en otro componente, ¿cuál se ejecutará primero cuando la cola esté vacía?
  • c) Dice que sugiere a Angular que ejecute la detección de cambios. Entonces, ¿qué significa "pista"? ¿Cuándo Angular ejecutará la detección de cambios y cuándo no?
  • d) Si cambio onMicrotaskEmpty con onStable, el código aún funciona bien. ¿Son básicamente lo mismo? (Ambos se ejecutan cuando se terminan todas las microtareas)

3) first() La única explicación de este método que obtuve fue de w3school: "El método first() devuelve el primer elemento de los elementos seleccionados". Entonces, lo que no entiendo está en el código anterior, qué elementos seleccioné. Intenté ejecutar console.dir y .log en esto, pero todo lo que obtengo es [object Object] . Así que me gustaría saber el primero de qué elementos?

4) subscribe() Realmente no sé por qué hay una suscripción aquí. Tenía la impresión de que solo puedes suscribirte a observables/promesas. ¿Puede suscribirse a cualquier cosa que pueda dar un cambio y luego ejecutar el bloque de código de suscripción cuando cambia? Si es así, ¿cuál en los métodos anteriores es el método que cambia y que activó la ejecución de la suscripción?

Espero que parezca que he intentado y buscado respuestas para lo anterior, pero todo parece estar escrito para personas que no necesitarían leerlo en primer lugar... :P

almost 3 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Vm no es una máquina virtual, tampoco sé qué es, pero Zone en Angular es un contexto de ejecución para ayudarlo a administrar múltiples operaciones asíncronas. Más sobre esto aquí.

Zona de comprensión

this.ngZone.onMicrotaskEmpty es un flujo observable y first() es un operador que devuelve el primer valor emitido por ese flujo, ya que un flujo observable puede tener muchos valores diferentes a lo largo del tiempo.

subscribe() es la única forma de obtener valores de esa transmisión o recibir una notificación cuando se envían algunos valores a esa transmisión

Le sugiero que lea un poco sobre la zona y los observables Rxjs, aclarará gran parte de sus confusiones.

almost 3 years ago · Santiago Trujillo Denunciar

0

Lo que debe comprender sobre onMicrotaskEmpty es que espera a que la cola de la microtarea esté vacía, no la macrotarea.

La microtarea tiene tareas que son directamente parte del código que está ejecutando. Entonces, diga en su código que realiza una llamada HTTP y espera a que se resuelva a través de una promesa, eso es en la microtarea.

La cola de macrotareas tiene tareas que son más globales. Por ejemplo, un movimiento del mouse o algo en un setTimeout .

Entonces, cuando espera que la microtarea esté vacía, significa que desea ejecutarla justo después de que se complete el "proceso" actual, pero antes de que el motor maneje la siguiente tarea en la macrotarea.

También vea esta respuesta para una discusión adicional

Espero que ayude

almost 3 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda