• [RxJS] ShareReplay vs share


    ShareReplay is using ReplaySubject. It will reply the messages to later subscribers. It turns unicast observable to multicase observable.

    shareReplay(1, 2000): 1: replay lastest value, 2000: 2 second, replay value only if in 2s

    import { fromEvent } from 'rxjs';
    import { ajax } from 'rxjs/ajax';
    import { shareReplay, mergeMapTo, share } from 'rxjs/operators';
    
    const observer = {
      next: val => console.log('next', val),
      error: err => console.log('error', err),
      complete: () => console.log('complete')
    };
    
    const click$ = fromEvent(document, 'click');
    const ajax$ = ajax('https://api.github.com/users/octocat');
    
    /*
     * shareReplay turns a unicast observable into multicasted
     * observable, utilizing a ReplaySubject behind the scenes.
     * 
     * In this example, we are mapping any clicks to an ajax
     * request, sharing the response.
     */
    const sharedClick$ = click$.pipe(
      mergeMapTo(ajax$),
      /*
       * By default shareReplay shares all old values, like
       * a standard ReplaySubject. In this case, we only want
       * to share the most recent response.
       */
      shareReplay(1)
    );
    
    sharedClick$.subscribe(observer)
    
    /*
     * Late subscribers will be replayed old value(s).
     */
    setTimeout(() => {
      console.log('subscribing');
      sharedClick$.subscribe(observer);
    }, 5000);

    If you don't need replay functionality, you can use share() instead

  • 相关阅读:
    6-8 adaboost分类器2
    6-7 adaboost分类器1
    6-6 Haar特征3
    6-5 Haar特征2
    6-4 Haar特征1
    6-3 图片合成视频
    6-2 视频分解图片
    Linux操作系统六大优点
    Linux系统正则表达式用法笔记
    Linux系统正则表达式用法笔记
  • 原文地址:https://www.cnblogs.com/Answer1215/p/16730560.html
Copyright © 2020-2023  润新知