Prefacio
El núcleo de RXJS es el objeto observable, que es una combinación de programación asincrónica y de eventos utilizando secuencias de datos observables.
El modelo de programación asíncrono que es muy similar a esto es prometedor. Promise es un modelo asincrónico basado en cambios en el estado. Una vez que el estado de espera ingresa a un estado exitoso o fallido, no se puede modificar nuevamente. Cuando cambia el estado, el suscriptor solo puede obtener un valor; Si bien el observable es un modelo de programación asincrónico basado en secuencias. A medida que cambia la secuencia, el suscriptor puede obtener continuamente nuevos valores. Además, Promise solo proporciona un mecanismo de devolución de llamada y no tiene más operaciones para respaldar el procesamiento complejo de resultados. Observable proporciona una variedad de operadores para procesar los resultados de la operación para cumplir con la lógica de aplicación compleja.
En la programación real, tratamos principalmente de tres objetos: observable , observador , suscripción :
Tome el evento de clic de un elemento como ejemplo para ver cómo usar observable:
var clickstream = new rx.observable (observver => {var handle = evt => observver.next (evt); element.adDeventListener ('click', handle); return () => element.removeEventListener ('click', handle);}); senscription = clickstream.subscribe (evt => {consultor (consolution (',' '' evt.id);}, err => {console.error ('onError');}, () => {console.log ('oncomplete');}); setTimeout (() => {suscription.unsubScribe ();}, 1000); ¿No sería demasiado problemático si cada evento necesita estar envuelto así? Por lo tanto, RXJS nos proporciona una función conveniente: Observable.fromEvent para facilitar la conexión de los eventos.
Operadores de enlaces comunes: concat, fusionar, combinelatos, etc.
Operaciones de proyección: MAP, FLATMAP, FLATMAP debe introducirse
Filtro: filtro, distintivoChanges,
Clasificación del operador: operadores por categorías
Manejo de errores: atrapar, reintentar, finalmente
Desecompresión: debupe, acelerador, muestra, pausable
Reducir: buffer, bufferwithcount, bufferwithtime
Para dominar los operadores de observables, primero debe aprender a comprender el diagrama de secuencia:
Las flechas representan secuencias que cambian con el tiempo. Por ejemplo, haciendo clic en el mouse continuamente en un elemento, y el círculo representa el impacto de la secuencia en el exterior. Por ejemplo, cada clic del elemento activará una devolución de llamada de eventos, y los números en el círculo son información emitida desde el exterior. Por ejemplo, cada evento que se activará tendrá un objeto de evento, que representa alguna información de esta operación.
Para usar de manera flexible observable para manejar la lógica compleja, debe aprender a usar los operadores que proporciona. Dividí los operadores en dos categorías: operación de secuencia única y operación de secuencia compuesta. La operación de secuencia única se refiere a las operaciones de operación realizadas en una secuencia. La operación de secuencia compuesta se refiere a los operadores que procesan dos o más secuencias. La operación de secuencia compuesta es relativamente difícil de entender.
Veamos primero las operaciones de secuencia única, tomando operaciones de mapas como ejemplo:
La operación del mapa es convertir la información transmitida al exterior en una secuencia cada vez. Como se muestra en la figura anterior, MAP multiplica el valor de transmisión de cada vez por diez. Luego, cuando el suscriptor se suscribe, el valor de suscripción obtenido cada vez ya no es el 123 original, sino el convertido 10 20 30. A través de diagramas de secuencia, puede comprender más fácilmente las operaciones de Observables.
Tomemos la fusión como ejemplo
El propósito de la operación de fusión es sintetizar dos secuencias independientes en una secuencia. Originalmente, a medida que avanza el tiempo, la secuencia 1 transmite A a 100 ms, b a 200 ms y c a 300 ms, su suscriptor recibirá tres valores de ABC a 400 ms; La secuencia 2 transmite D a 150 ms, E a 250 ms y F a 350 ms, y su suscriptor recibe tres valores de DEF dentro de los 400 ms. La nueva secuencia después de la fusión recibirá ABCDEF dentro de los 400 ms (tenga en cuenta el pedido).
Comprensión de los operadores comunes:
Observable. Range: transmite un cierto número de secuencias de valor.
Observable. ToArray: convierte todos los valores emitidos en una matriz cuando se completa la secuencia.
Observable
Observable.Startwith: establece el primer valor de la secuencia observable
Observable.comBinelatest: Similar a PromiteSeall, se ejecutará solo después de que todas las secuencias tengan resultados.
Observable.scan: los valores emitidos en la secuencia pueden agregarse. Similar a Reduce, Reduce agregará los valores de toda la secuencia y enviará un valor final cuando se complete la secuencia.
Observable. Muestra: Obtenga una determinada muestra de una secuencia continua
Observable.merge: fusionar múltiples secuencias en una y se puede usar como
Observable.timestamp: puede obtener el tiempo de transmisión de cada valor de transmisión
Observable
Observable.takewhile () deja de transmitir datos cuando el parámetro es falso
Resumir
Lo anterior es todo el contenido de este artículo. Espero que el contenido de este artículo sea de ayuda para el estudio o el trabajo de todos. Si tiene alguna pregunta, puede dejar un mensaje para comunicarse.