Requisitos: El proyecto necesita convertir Observables en Promesas y esperar a su finalización, y al usar el método toPromise() en un proyecto Angular, la pista ha sido obsoleta, y entonces se recomienda usar los métodos estáticos firstValueFrom o lastValueFrom.
¿Por qué desestimar el método toPromise()?
Debido a que el nombre del método toPromise() nunca indica qué valor emitido resolverá la Promesa, porque los Observables pueden producir múltiples valores a lo largo del tiempo. Al convertir a una Promesa, puede que quieras elegir si quieres seleccionar el primer valor que llega o el último. Para resolver todos estos problemas, decidimos desactivar toPromise() e introducir dos nuevas funciones auxiliares para convertir a promesas.
Simplemente entiendeLos observables producen múltiples valoresY entoncesLas promesas solo darán lugar a un valorLuego, algunos usuarios quieren usar el primer valor y otros quieren usar el último, así que aparecen firstValueFrom y lastValueFrom. (Nota: toPromise() es el último valor para obtener los observables)
ejemplo firstValueFrom
Quizá quieras obtener el primer valor cuando llegue sin esperar a que el Observable se complete, para poder usar firstValueFrom. firstValueFrom resolverá la Promesa con el primer valor emitido por el Observable y se dará de baja inmediatamente para preservar el recurso. Si el Observable se completa sin emitir ningún valor, el firstValueFrom también será rechazado con un EmptyError.
ejemplo lastValueFrom
lastValueFrom es casi idéntico a toPromise(), lo que significa que analizará con el último valor alcanzado cuando el Observable se completa, pero se comporta de forma diferente cuando el Observable termina sin emitir ni un solo valor. Cuando el Observable se completa sin ser disparado, toPromise() se resolverá correctamente a indefinido (por lo que cambia el tipo de retorno), y lastValueFrom será rechazado como EmptyError. Por lo tanto, el tipo de retorno de lastValueFrom es Promise<T>, igual que toPromise() en RxJS 6.
Ejemplos de análisis sintáctico
En RxJS, intervalo(1000) genera un observable que emite una secuencia incremental de números cada 1000 milisegundos (es decir, 1 segundo), comenzando en 0.
A continuación, .pipe(take(10)) es una cadena de operadores que limita el número de elementos que emite el Observable. Aquí, take(10) significa que solo se toman los valores de los primeros 10 emitidos.
Expliquemos esta expresión en detalle:
intervalo(1000): Crear un observable que emita un número cada 1 segundo. La secuencia numérica comienza en 0 y aumenta en 1 cada vez.
.pipe(take(10)): Utiliza el método .pipe() para conectar varios operadores. Aquí usamos el operador take(10), que limita el observable a emitir solo los primeros 10 valores.
Prueba para errores de EmptyError
El código es el siguiente:
o
Referencia:El inicio de sesión del hipervínculo es visible. |