Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

296
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda