zoukankan      html  css  js  c++  java
  • [RxJS] Hot Observable, by .share()

    .share() is an alias for .publish().refCount().

    So if the source is not yet completed, no matter how many subscribers subscribe to the source, they share the same source. 

    const clock$ = Rx.Observable.interval(500).share().take(6);
    
    const randomNum$ = clock$
      .map(i => Math.random() * 100).share();
    
    const smallNum$ = randomNum$
      .filter(x => x <= 50)
      .toArray();
    
    const largeNum$ = randomNum$
      .filter(x => x > 50)
      .toArray();
    
    randomNum$.subscribe(x => console.log('random: ' + x));
    smallNum$.subscribe(x => console.log('small:', x));
    largeNum$.subscribe(x => console.log('large:', x));
    
    /*
    
    Console Run  Clear
    "random: 49.87840398986816"
    "random: 75.01024609865293"
    "random: 32.59613439667008"
    "random: 63.4234109489461"
    "random: 35.58020574147034"
    "random: 74.94599860014348"
    "small:"
    [49.87840398986816, 32.59613439667008, 35.58020574147034]
    "large:"
    [75.01024609865293, 63.4234109489461, 74.94599860014348]
    */

    It is important to know share the same source is only before the source stream completed, if it is already completed, then the new subscribers will trigger another source running.

    For example, in the code, we change largeNum$ happens after 4s of first subscriber.

    setTimeout(() => largeNum$.subscribe(x => console.log('large:', x)), 4000)

    Because source will complete after 3s, therefor it will trigger a new source:

    /*
    "random: 74.91154828671043"
    "random: 10.964684522348733"
    "random: 29.076967396825903"
    "random: 20.070493440627235"
    "random: 22.44421045844409"
    "random: 14.233614544120798"
    "small:"
    [10.964684522348733, 29.076967396825903, 20.070493440627235, 22.44421045844409, 14.233614544120798]
    "large:"
    [93.04544926644354, 65.4090612653734, 67.15475480984114]
    */

    As we can see, in the large array, all the numbers are not from random we log out before.

  • 相关阅读:
    跨平台这件事儿
    BTrace : Java 线上问题排查神器
    Spring 实现自定义 bean 的扩展
    运用计划缓冲的建议
    查询计划Hash和查询Hash
    执行计划的重用
    执行计划组件、组件、老化
    执行计划的生成
    SQL Server索引 (原理、存储)聚集索引、非聚集索引、堆 <第一篇>
    SQL Server执行计划的理解
  • 原文地址:https://www.cnblogs.com/Answer1215/p/6925452.html
Copyright © 2011-2022 走看看