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

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

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