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

217
Views
¿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 answers
Answer question

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 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!