Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

290
Views
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

about 4 years ago · Santiago Trujillo
2 answers
Answer question

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.

about 4 years ago · Santiago Trujillo Report

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

about 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!