rxjs學習記錄 熱流 冷流

rxjs 熱流冷流

冷流

    let count = 1;
    let obs = Observable.create(observer => {
      observer.next(count++);
    });
    let sub1 = obs.subscribe(res => console.log('sub1', res)); // sub1 1
    let sub2 = obs.subscribe(res => console.log('sub2', res)); // sub2 2

訂閱一次流的數據就重新產生一次

半熱

    let count2 = 1;
    let obs1 = Observable.create(observer => {
      observer.next(count2++);
    //   setTimeout(() => { observer.next(count2++); })
    })
    .pipe(map(t => {console.log(t); return t}))
    // .publish();
    .pipe(publish());
    let sub3 = obs1.subscribe(res => console.log('sub3', res)); // sub3 1
    let sub4 = obs1.subscribe(res => console.log('sub4', res)); // sub4 1
    obs1.connect();
    let sub5 = obs1.subscribe(res => console.log('sub5', res)); // 沒有數據 

connect時流產生一次,在connect之前的訂閱者都是可以接收到產生的數據,之後的卻不能
取消setTimeout時可以sub5是可以接收到值

熱流

  let count3 = 1;
   let obs2 = Observable.create(observer => {
    observer.next(count3++);
    observer.next(count3++);
    setTimeout(() => { observer.next(count3++); }, 1000);
    // setTimeout(() => { observer.next(count3++); }, 2000);
  })
  // .publish();
  .pipe(publish())
  .pipe(refCount())
  let sub6 = obs2.subscribe(res => console.log('sub6', res)); // sub3 1
  let sub7 = obs2.subscribe(res => console.log('sub7', res)); // sub4 1
  /*
   sub6 1 ,sub6 2, sub6 3, sub7 3
  */

這個就比較奇怪了,感覺像是sub6去激活了數據的產生
直觀的想setTimeout爲異步console.log值應該是
sub6 1 ,sub6 2,sub7 2, sub6 3, sub7 3
但是卻爲
sub6 1 ,sub6 2, sub6 3, sub7 3
很奇怪沒想明白

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章