zoukankan      html  css  js  c++  java
  • rxjs 常用的subject

    Subject

    Subject是可观察的一种特殊类型,它允许将值多播到许多观察者

    import {Subject} from 'rxjs';
    
    const l = console.log;
    let x$ = new Subject<number>();
    x$.subscribe(v => l(`a => ${v}`)); // 1, 2, 3
    x$.next(1);
    x$.next(2);
    
    setTimeout(() => {
      x$.subscribe(v => l(`b => ${v}`)); // 3
      x$.next(3);
    }, 2000);
    

    BehaviorSubject

    Subject的变体,需要初始值,并且在订阅时会发出其当前值。

    import {BehaviorSubject} from 'rxjs';
    
    const l = console.log;
    let x$ = new BehaviorSubject<number>(0);
    x$.subscribe(v => l(`a => ${v}`)); // 0, 1, 2, 3
    x$.next(1);
    x$.next(2);
    
    setTimeout(() => {
      // 订阅时发出当前值: 2
      x$.subscribe(v => l(`b => ${v}`)); // 2, 3
      x$.next(3);
    }, 2000);
    

    AsyncSubject

    Subject的变体,仅在完成时才发出值。完成后,它将向所有观察者发出其最新值。

    import {AsyncSubject} from 'rxjs';
    
    const l = console.log;
    let x$ = new AsyncSubject<number>();
    x$.subscribe(l); // 2
    x$.next(1);
    x$.next(2);
    x$.complete();
    

    ReplaySubject

    可“重放”或向新订阅者发出旧值。 它缓冲一定数量的值,除了向现有订户发送新值外,还将立即将这些值发送给任何新订户。

    import {ReplaySubject} from 'rxjs';
    
    const l = console.log;
    let x$ = new ReplaySubject<number>();
    x$.subscribe(v => l(`a => ${v}`)); // 1, 2, 3
    x$.next(1);
    x$.next(2);
    
    setTimeout(() => {
      // 2s后,向新的订阅发出旧的值:1,2
      x$.subscribe(v => l(`b => ${v}`)); // 1, 2, 3
      x$.next(3);
    }, 2000);
    
  • 相关阅读:
    Nodejs怎样在服务端写定时脚本,自动备份MongoDB数据库,并记录日志
    nodejs-websocket初使用
    CSS3的复习笔记
    ES6的新增特性
    Windows下初体验MongoDB数据库
    Node.js数据库的配置,封装query
    Nuxt+Vuex初体验
    Vue+Vuex初体验
    github二级域名配置
    钉钉静默安装
  • 原文地址:https://www.cnblogs.com/ajanuw/p/11809896.html
Copyright © 2011-2022 走看看