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);
    
  • 相关阅读:
    原创 爱因斯坦迷题及推导过程
    惊闻姑姑家女婿去世,哀叹生命之脆弱,死亡如此接近
    京东自营预售逻辑
    自营SKU绑定逻辑
    自营结算解释&对账逻辑
    CPS逻辑
    京东搜索结果数据异常
    C++静态库中使用_declspec(dllexport) 不能导出函数的问题
    HTTP+SVN访问速度慢的问题
    Python log
  • 原文地址:https://www.cnblogs.com/ajanuw/p/11809896.html
Copyright © 2011-2022 走看看