Este artículo es un artículo espejo de traducción automática, por favor haga clic aquí para saltar al artículo original.

Vista: 3279|Respuesta: 2

[Otros] RxJS sobre la diferencia entre firstValueFrom y lastValueFrom

[Copiar enlace]
Publicado el 6-8-2024 11:19:02 | | | |
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.




Anterior:¿Resultados de la consulta de línea de comandos de MySQL ¿? signo de interrogación
Próximo:La serie Angular 18 (veintidós) introduce la biblioteca de iconos FontAwesome
 Propietario| Publicado el 6-8-2024 a las 11:21:09 |
Si usas lastValueFrom o firstValueFrom en HTTP Angular, es equivalente, no hay diferencia, es decir, puedes usar cualquiera de los dos.
 Propietario| Publicado el 16-10-2024 21:44:52 |
Si devuelves of() puedes obtener una excepción de no hay elementos en secuencia, lastValueFrom now toma el parámetro de configuración como su segundo parámetro, y puedes especificar el valor por defecto a emitir cuando el observable esté vacío:

Renuncia:
Todo el software, materiales de programación o artículos publicados por Code Farmer Network son únicamente para fines de aprendizaje e investigación; El contenido anterior no se utilizará con fines comerciales o ilegales; de lo contrario, los usuarios asumirán todas las consecuencias. La información de este sitio proviene de Internet, y las disputas de derechos de autor no tienen nada que ver con este sitio. Debes eliminar completamente el contenido anterior de tu ordenador en un plazo de 24 horas desde la descarga. Si te gusta el programa, por favor apoya el software genuino, compra el registro y obtén mejores servicios genuinos. Si hay alguna infracción, por favor contáctanos por correo electrónico.

Mail To:help@itsvse.com