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
Observable
y convertirlo en una función de utilidad independiente.El naming de
toPromise
no 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
toPromise
es incorrecta. Cuando la fuenteObservable
se completó sin emitir un solo valor, se resolvió conundefined
. Debería rechazar en ese caso. UnaPromise
es 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óundefined
a 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