Múltiples solicitudes de API utilizando mergeMap y forkJoin en lugar de suscribirse

imagen

Una guía para usar mergeMap y forkJoin en lugar de suscripciones simples para múltiples solicitudes de API.

En este artículo, mostraré dos enfoques para manejar múltiples consultas en Angular usando mergeMap y forkJoin.

Contenido:


  1. El problema
  2. suscribirse
  3. mergeMap
  4. forkJoin
  5. Combinando mergeMap y forkJoin
  6. Comparar suscribirse con mergeMap y forkJoin

El problema


En el desarrollo de aplicaciones web, a menudo necesitamos más de una llamada API. Usted va a la página, realiza varias solicitudes, obtiene los datos necesarios y los resultados de algunas de estas solicitudes son necesarios para las llamadas posteriores.

Cuando hacemos tales solicitudes múltiples, es importante procesarlas de manera eficiente mientras se mantiene un alto nivel de rendimiento y calidad de código.

Le mostraré una aplicación simple donde necesitamos hacer 3 solicitudes a la API de prueba ( https://jsonplaceholder.typicode.com ):

  1. Inicie sesión y solicite información del usuario
  2. Según la información del usuario, obtenemos una lista de publicaciones de usuarios
  3. Según la información del usuario, obtenemos una lista de álbumes creados por el usuario

suscribirse es la forma habitual de manejar solicitudes en Angular, pero existen métodos más eficientes. Primero resolveremos el problema usando subscribe, y luego mejoraremos la solución usando mergeMap y forkJoin.

suscribirse


Bastante simple. Hacemos la primera solicitud a la API. Luego, en la suscripción anidada, para que pueda usar la primera respuesta, hacemos dos solicitudes más a la API.

imagen

mergeMap


Este operador se utiliza mejor cuando necesitamos controlar manualmente el orden de las solicitudes.

Entonces, ¿cuándo usamos mergeMap?
Cuando el resultado de la primera solicitud de API, tenemos que hacer lo siguiente.

imagen

Mire un ejemplo, vemos que para la segunda solicitud necesitamos userId de la respuesta de la primera llamada.

Por favor tenga en cuenta:

  1. flatMap - alias para mergeMap
  2. mergeMap admite múltiples suscripciones internas activas al mismo tiempo, por lo que puede crear una pérdida de memoria con suscripciones de larga duración

forkJoin


Este operador es adecuado si necesitamos hacer varias consultas y el resultado de cada una es importante. Es decir, puede agrupar varias consultas, ejecutarlas en paralelo y devolver solo una observable.

Entonces, ¿cuándo usamos forkJoin?

Cuando las solicitudes se pueden ejecutar en paralelo y no dependen unas de otras.

imagen

Combinando mergeMap y forkJoin


Por lo general, en el desarrollo nos enfrentamos a una situación en la que debe realizar varias solicitudes que dependen del resultado de la ejecución de alguna otra solicitud. Veamos cómo se puede hacer esto usando mergeMap y forkJoin.

imagen

Así que evitamos las suscripciones anidadas y dividimos el código en varios métodos pequeños.

Comparación de una suscripción regular con mergeMap y forkJoin


La única diferencia que noté es el análisis HTML.

Veamos el tiempo que tomó el análisis cuando se usa una suscripción regular:

imagen

Ahora veamos cuánto HTML se analiza usando mergeMap y forkJoin

imagen

Comparé el resultado varias veces y llegué a la conclusión de que analizar con mergeMap y forkJoin siempre es más rápido, pero la diferencia no es muy grande (~ 100 ms).
Lo más importante es una forma de hacer que el código sea más comprensible y legible.

Para resumir


Podemos usar RxJS para manejar múltiples solicitudes en Angular. Esto nos ayuda a escribir código más legible y compatible. Bueno, como beneficio adicional, vemos un ligero aumento en el rendimiento si usamos métodos RxJS en lugar de suscripciones regulares.

¡Espero que el artículo haya sido útil! Sígueme en Medium y Twitter . Siéntase libre de comentar y hacer preguntas. Estaré encantado de ayudar!

Fuentes aquí .

Source: https://habr.com/ru/post/471572/


All Articles