Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

214
Vistas
¿Convertir rxjs concatMap anidado en aysnc-await?

Siempre encuentro concatMap anidado, las últimas solicitudes http se basan en los resultados anteriores. Vea el ejemplo a continuación, necesito obtener formConfig y luego usar la identificación de formConfig para obtener el registro de la aplicación, luego xxx. ¿Es más legible y mantenible convertir rxjs concatMap anidado en aysnc await ( Evitar el infierno de devolución de llamada)? ¿Pros y contras? ¿Cuál es más fácil de procesar el manejo de errores?

ConcatMap general anidado

 ngOnInit(){ this.http.get(`/app-config/${this.appType}`) .pipe( concatMap(formConfig => { this.formConfig = formConfig; return this.http.get(`/appl/${this.formConfig.id}`); }), concatMap(applRec => { this.applRec = applRec; return this.http.get(`/xxx/${this.applRec.recNo}`) }) tap((val) => {this.xxx = val}) .... ).subscribe(); }

Gire a asíncrono aguarde a Promise

 constructor(){ this.init().then(); } async init() { this.formConfig = await this.http.get(`/app-config/${this.appType}`).toPromise(); this.applRec = await this.http.get(`/appl/${this.formConfig.id}`).toPromise(); this.xxx = await this.http.get(`/xxx/${this.applRec.recNo}`).toPromise(); }
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

toPromise() está en desuso y se está eliminando, por lo que probablemente debería evitarlo. Más información sobre eso aquí: https://indepth.dev/posts/1287/rxjs-heads-up-topromise-is- being -deprecated#why-is-this-happening-to-me.

Si desea usar async / await /promises, puede usar firstValueFrom() . Las desventajas de usarlo se describen en los documentos aquí: https://rxjs.dev/api/index/function/firstValueFrom

ADVERTENCIA: solo use esto con observables que sepa que emitirán al menos un valor, O completo. Si la fuente observable no emite un valor o no se completa, terminará con una promesa colgada y, potencialmente, todo el estado de una función asíncrona colgando en la memoria. Para evitar esta situación, considere agregar algo como timeout, take, takeWhile o takeUntil, entre otros.

Entonces, la desventaja de las promesas es que necesita agregar un tiempo de espera o corre el riesgo de una pérdida de memoria. Sin embargo, no creo que tengas que preocuparte por esto al usar los observables del servicio HttpClient, nunca he visto uno que no emita un valor o se complete.

Dado que solo está buscando valores únicos y flujos no observables, no veo ningún inconveniente en el uso de promesas aquí. También puede simplemente etiquetar ngOnInit como async .

 async ngOnInit() { this.formConfig = await firstValueFrom(this.http.get(`/app-config/${this.appType}`)); this.applRec = await firstValueFrom(this.http.get(`/appl/${this.formConfig.id}`)); this.xxx = await firstValueFrom(this.http.get(`/xxx/${this.applRec.recNo}`)); }
about 4 years ago · Juan Pablo Isaza 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 Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda