Primeiros passos com RxJS 6

RxJS, a biblioteca ReactiveX para JavaScript
Site oficial do RxJS

1 Padrões de design usados ​​​​em Rxjs

  • Padrão de observador
  • Padrão de iterador
  • Padrões de design, como programação funcional e coleções

Objetivo principal: gerenciar efetivamente dados de eventos em ambientes assíncronos RxJS é um conjunto de bibliotecas de funções JavaScript usadas para lidar com eventos assíncronos ou

assíncrono
  • AJAX/XHR/Buscar
  • Trabalhador de serviço/fluxo de nó
  • setTimeout/setInterval
  • Promessa
evento
  • Vários eventos DOM (click, dblclick, keyup, mousemove)
  • Evento de animação CSS (evento CSS3 transactionEnd)
  • Geolocalização HTML5 / WebSockets / Evento de envio de servidor

2 Conceitos básicos de RxJS

Objeto observável observável
Objeto observador observador
  • Representa um objeto usado para receber [resultados da observação] (o que é recebido são dados do evento)
  • Um objeto observador é um objeto que contém três propriedades (próximo, erro, completo) que contêm funções de retorno de chamada.
Objeto de assinatura de assinatura
  • Representa o indivíduo de execução que está executando o Observable/Observador (pode ser usado para cancelar a assinatura)
Operadores
  • Deve ter características de função pura (funções sem efeitos colaterais), conforme definido na programação funcional
  • Deve ser usado para processar uma série de coletas de dados de eventos
  • Operadores comuns incluem map, filter, concat, flatMap, switchMap https://reactive.how/
Assunto objeto principal
  • Assim como o EventEmitter, ele é usado principalmente para transmitir dados de eventos recebidos para vários observadores.
Controlador de agendamento de agendadores
  • Usado para gerenciar e agendar centralmente dados entre vários eventos para controlar a simultaneidade de eventos.
import {
    
     Subject } from 'rxjs';
import {
    
     throttleTime } from 'rxjs/operators';

export class CreateBackupComponent implements OnInit {
    
    
    clickOne = new Subject;
    ngOnInit() {
    
    
        this.clickOne.pipe(throttleTime(500)).subscribe((params) => {
    
    
            this.saveData(params);
        })
    }
    saveData(params) {
    
    
        const {
    
     id, name} = params;
        ...
    }

    okButton: {
    
    
        'click': () => {
    
    
          message.close();
          this.clickOne.next({
    
     id: newsId, name: newsName });
        }
    }
}

// 点击button,执行click事件:this.clickOne.next()
// 执行this.clickOne.next(),相当于执行this.saveData()事件
// this.clickOne.next()传入的参数{ id: newsId, name: newsName },就是this.saveData()中的参数;
// 最终结果:连续点击click,每500毫秒只执行一次saveData事件

3 Como funciona o RxJS

interval: função interna do rxjs;
interval(500): envia um número a cada 500 milissegundos, começando em 0;
pipe: passa os dados do evento enviados a cada 500 milissegundos para processamento;
take(4): pega apenas os primeiros 4 transações;
subscribe: Assinante, o assinante em subscribe() é o observador do assinante

rxjs.interval(500).pipe(rxjs.operators.take(4)).subscribe(console.log)
0
1
2
3
// interval:建立运算子,建立observable物件
// pipe:过滤运算子
// console.log:观察者
// 解构
import {
    
     interval } from 'rxjs';
import {
    
     take } from 'rxjs.operators';
interval(500).pipe(take(4)).subscribe(console.log)
const subs = rxjs.interval(500).pipe(rxjs.operators.take(40)).subscribe(console.log)
// 每隔500毫秒发送一个数字,从0开始,发送到40
subs.unsubscrible(); // 暂停订阅

3.1 Como funciona o RxJS

  • Crie um objeto observável
var click$ = rxjs.fromEvent(document, 'click')
  • Criar objeto observador
var observer = {
    
     next: (x) => console.log(x) };

Um observador pode ser uma função ou um objeto. Os objetos têm três atributos: próximo, erro e concluído.

  • Crie um objeto de assinatura (inscreva-se no objeto Observable e passe o objeto Observer)
var subs$ = click$.subscribe(observer);
  • Cancelar assinatura do objeto Assinatura
subs$.unsubscribe();

Observável não acionará ativamente a observação. Alguém precisa se inscrever para acionar o comportamento de observação;
conecte o cano de água e filtre continuamente:

var subs$ = click$.pipe(
	filter(d => d.clientX < 500),
	take(4)
).subscribe(observer);

3.2 Uso do objeto de assunto RxJS (Assunto)

  • Crie o objeto principal (você usará o objeto principal para transmissão posteriormente)
var subject = new rxjs.Subject();
  • Crie um objeto observável
var clicks$ = rxjs.fromEvent(document, 'click')
  • Defina para obter no máximo dois dados de eventos e defina o objeto Observable para ser concluído.
clicks$ = clicks$.pipe(take(2));
  • Defina todos os cliques$ para serem transmitidos pelo objeto em questão.
clicks$.subscribe(subject);
  • Finalmente, o objeto Observer é criado pelo sujeito
var subs1$ = subject.subscribe((x) => console.log(x.clientX));
var subs2$ = subject.subscribe((x) => console.log(x.clientY));
  • Cancelar subscrição
subs1$.unsubscrible();
subs2$.unsubscribe();

O assunto ajuda a alcançar o efeito de um Observável ser assinado por vários observadores, o que equivale a um intermediário;
como o assunto opera em múltiplas páginas;

4 operadores comuns

4.1 Criar operadores

Responsável por criar um objeto Observável

  • de
  • ajax
  • adiar
  • gerar
  • deEvento
  • intervalo
  • de
  • faixa

4.2 Operadores de criação de combinação

Combine vários objetos observáveis ​​em um objeto observável

  • corrida
  • fecho eclair
  • mesclar
  • forkJoin
  • concat
  • combinarÚltimo

4.3 Operadores de conversão

Converta os dados passados ​​pelo Observable em outro formato

  • concatMap
  • mapa
  • mapa para
  • amortecedor
  • switchMapTo

4.4 Operadores de filtro

Responsável por filtrar os dados passados ​​pelo Observable

  • rebater
  • debounceTime
  • filtro
  • pular
  • acelerador
  • aceleradorTime

4.5 Operadores de combinação

Responsável por combinar vários Observáveis

  • combinar tudo
  • concatAll
  • começar com

4.6 Operadores multicast

Responsável pela transmissão do Observável para vários observadores

  • publicar
  • compartilhar

4.7 Operadores de tratamento de erros

Responsável por lidar com erros de exceção que ocorrem durante a observação observável

  • catchError
  • tente novamente
  • tentar novamenteQuando
import {
    
     retry } from 'rxjs/operators';

ngOnInit(): void {
    
    
    this.http.get('/assets/area.json')
        .pipe(retry(3)) 
        // 请求不到数据,会再次尝试3次,还是抓不到就放弃,可以搭配delay等,延迟一定时间再retry
        .subscribe(data => {
    
    
            getArea(data);
        })
}

4.8 Operadores de funções utilitárias

Função utilitária responsável por fornecer processo de execução observável

  • tocar
  • atraso
  • tempo esgotado

4.9 Expressões condicionais e operadores booleanos

Operador responsável por calcular condições específicas e retornar um valor booleano

  • padrãoVazio
  • encontrar
  • todo
  • está vazia

4.10 Matemática e operadores de agregação

Responsável por realizar operações matemáticas/resumidas nos dados passados ​​pelo Observable

  • contar
  • máx.
  • min
  • reduzir

Acho que você gosta

Origin blog.csdn.net/weixin_45678402/article/details/129562472
Recomendado
Clasificación