zoukankan      html  css  js  c++  java
  • rxjs——subject和Observable的区别

    原创文章,转载请注明出处

    理解

    observable的每个订阅者之间,是独立的,完整的享受observable流动下来的数据的。
    subject的订阅者之间,是共享一个留下来的数据的

    举例

    这里的clock$ 被订阅者被 observerA,observerB ,observerC 三个订阅者在不同的时间独自订阅。
    对于三个订阅者,clock$ 都是从头重新完成的跑一遍。

        let a=''
            const clock$ = Rx.Observable.interval(1000).take(3);
    
            const observerA = {
                next(v) {
                    a+='--A执行了,'
                    console.log('A next: ' + v)
                    console.log(a)
                }
            }
            const observerB = {
                next(v) {
                    a+='--B执行了,'
                    console.log('B next: ' + v)
                    console.log(a)
                }
            }
    
            const observerC = {
                next(v) {
                    a+='--C执行了,'
                    console.log('C next: ' + v)
                    console.log(a)
                }
            }
    
    
            clock$.subscribe(observerA) // a Observable execution
    
            setTimeout(() => {
                clock$.subscribe(observerB) // another new Observable execution
            }, 7000)
    
            setTimeout(() => {
                clock$.subscribe(observerC) // another new Observable execution
            }, 14000)
    
    /*
    A next: 0
    --A执行了,
    A next: 1
    --A执行了,--A执行了,
    A next: 2
    --A执行了,--A执行了,--A执行了,
    B next: 0
    --A执行了,--A执行了,--A执行了,--B执行了,
    B next: 1
    --A执行了,--A执行了,--A执行了,--B执行了,--B执行了,
    B next: 2
    --A执行了,--A执行了,--A执行了,--B执行了,--B执行了,--B执行了,
    C next: 0
    --A执行了,--A执行了,--A执行了,--B执行了,--B执行了,--B执行了,--C执行了,
    C next: 1
    --A执行了,--A执行了,--A执行了,--B执行了,--B执行了,--B执行了,--C执行了,--C执行了,
    C next: 2
    --A执行了,--A执行了,--A执行了,--B执行了,--B执行了,--B执行了,--C执行了,--C执行了,--C执行了,
     */
    
    

    对于subject则不同
    observerA,observerB ,observerC 三个订阅者在不同的时间订阅同一个subject。
    他们三个在时间上是共享一个subject。
    subject产生数据时,你这个订阅者如果没来得及订阅,那对不起,过了这个村就没这个店,你错过了。

    const { Observable, Subject } = Rx
    
    
    const clock$ = Observable.interval(1000).take(3);
    
    const observerA = {
      next(v) {
        console.log('A next: ' + v)
      }
    }
    const observerB = {
      next(v) {
        console.log('B next: ' + v)
      }
    }
    const subject = new Subject()
    subject.subscribe(observerA)
    
    clock$.subscribe(subject)
    
    setTimeout(() => {
      subject.subscribe(observerB)
    }, 2000)
    
    /*
     * A next: 0
     * A next: 1
     * A next: 2
     * B next: 2
     */
    
  • 相关阅读:
    民族、学历学位、所学专业、、专业技术职务 对应表
    Spring企业业务快速开发平台应该具备的基本框架
    winform中与asp.net中的 TreeView节点处理对比
    GB85611988《专业技术职务代码》
    ASP.NET获取文件名,后缀名
    各种国家标准代码表
    同样的门通向同样的结果要想得到没有的就要做不同的事
    哈佛MBA生是这样找工作的
    富爸爸,穷爸爸 总结财务自由
    WebSite和Web Application\网站与Web项目的区别
  • 原文地址:https://www.cnblogs.com/panfengde/p/10138899.html
Copyright © 2011-2022 走看看