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

274
Visualizações
RXJS: ¿Por qué mergemap no proporciona resultados de múltiples observables internos en el ejemplo?

Estoy tratando de comprender mejor mergemap recreando un ejemplo muy simple y no se está comportando como esperaba según mi comprensión de la descripción oficial.

En este ejemplo, cada clic sucesivo en el documento genera un solo resultado (es decir, la salida del observable "de", que es el comportamiento que habría esperado de switchmap. Mi comprensión de mergemap es que fusionará los resultados de múltiples observables internos que no parece ser el caso aquí.

Para examinar el ciclo de vida del observable, incluí la versión detallada de la función subscribe() para poder ver si se llama a complete(), pero no lo es, por lo que esperaba que los resultados de múltiples observables se acumularan con clics sucesivos en el documento y ser presentado en la salida en cada clic. Sin embargo, lo que sucede es que se crea un solo resultado observable nuevo cada vez. ¿Por qué cada clic sucesivo en el documento solo emite un flujo observable y descarta el anterior? ¿No es este el comportamiento de switchmap no mergemap?

 fromEvent(document, 'click') .pipe(mergeMap(() => of(Date.now()))) .subscribe({ next(x) { console.log('value ', x); }, complete() { console.log('done'); }, });
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

En este ejemplo, cada clic sucesivo en el documento genera un único resultado (es decir, el resultado del observable "de", que es el comportamiento que habría esperado del mapa de interruptores).

En este ejemplo, switchMap y mergeMap tienen el mismo comportamiento.

Aquí hay un código con el que puede jugar para ver dónde difieren los dos. Intente esto con mergeMap , switchMap y oye, ¿por qué no probar concatMap también?.

 // Lets pretend we're grabbing the date from a server. // The server is slow, so this takes 3 seconds function getDate(): Observable<number> { return timer(3000).pipe( map(_ => Date.now()) ); } fromEvent(document, 'click').pipe( take(5), mergeMap(getDate) ).subscribe({ next: x => console.log('value ', x), complete: () => console.log('done') });

La diferencia:

Notará cómo mergeMap mantiene cada 'clic' entrante del documento. Si hace 'clic' dos veces, habrá dos llamadas a getDate y ambas llamadas se mantendrán activas al mismo tiempo. 3 segundos después, la primera llamada se completará y emitirá un número y luego, unos momentos más tarde, la segunda llamada se completará y emitirá un número.

Una vez que haya hecho clic 5 veces y todas las llamadas resultantes a getDate completas, verá que su transmisión está lista.

Pruebe esto con switchMap y notará que si hace clic más de una vez en un intervalo de 3 segundos, el clic más antiguo se elimina en favor del más nuevo. switchMap solo permitirá que un solo observable interno (llamada a getDate) esté activo a la vez, por lo que cancela los antiguos y cambia a los nuevos.


Todo esto se vuelve más interesante cuando se trata de observables que emiten más de una vez.


Una nota rápida:

la combinación en mergeMap no significa "combinar los elementos que emiten estos flujos". Significa "fusionar estas corrientes".

about 4 years ago · Juan Pablo Isaza 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