He leído que toPromise() está en desuso en RxJS 7 y se eliminará en RxJS 8. A menudo lo he usado con sintaxis de espera asíncrona en angular para manejar llamadas http. ¿Se considera un anti patrón? Entiendo el concepto de transmisiones, pero una llamada http solo emite un valor único. No entiendo el punto de observable para una simple llamada http. ¿Qué debo usar a continuación? ¿Debo adoptar completamente la programación reactiva?
firstValueFrom y lastValueFrom es definitivamente una mejor alternativa por muchas razones:
await lastValueFrom(data$, {defaultValue: 'Some default value'}) Para obtener más información sobre esto, consulte el siguiente video:
https://www.youtube.com/watch?v=3aeK5SfWBSU
¿Por qué está pasando esto?
Como se menciona aquí , estas son las razones principales por las que toPromise está en desuso:
Un objetivo era eliminarlo del prototipo
Observabley convertirlo en una función de utilidad independiente.El naming de
toPromiseno es el mejor. Especialmente cuando se usa en combinación conawait, no se lee muy bien:await categories$.toPromise()vsawait lastValueFrom(categories$)La información de tipo de
toPromisees incorrecta. Cuando la fuenteObservablese completó sin emitir un solo valor, se resolvió conundefined. Debería rechazar en ese caso. UnaPromisees una "promesa" de que cuando se resuelva, un valor estará allí, y no estaráundefined. Pero cuando la transmisión se completa sin emitir nunca un valor, no puede diferenciar entre una transmisión que se emitióundefineda propósito y una transmisión que se completó sin emitir nunca más.
¿Qué deberías usar a continuación?
Si realmente insiste en hacerlo de la manera prometida, lastValueFrom / firstValueFrom . De lo contrario, cambiar a la programación reactiva sería el camino a seguir.
Este enlace debería ayudar-
https://indepth.dev/posts/1287/rxjs-heads-up-topromise-is- being-deprecated