Angular RxJS - 无法使冷的 observable 变热

Angular RxJS - fail to make cold observable hot

代码:

const cold = new Observable((observer: Observer<any>) => {
  observer.next(Math.random());
});

const hot = cold.pipe(share());
hot.subscribe(a =>  console.log('a: ' + a));
hot.subscribe(b =>  console.log('b: ' + b));

}

预期结果 - a 和 b 具有相同的值:

//一个:0.17919353301075858

// b: 0.17919353301075858

实际结果-只在浏览器控制台获取a的值:

//一个:0.07958207844185083

有什么想法吗?

您可以尝试 shareReplay(1) 重播 最后一个值

https://www.learnrxjs.io/learn-rxjs/operators/multicasting/sharereplay

还有一篇好文章:https://itnext.io/the-magic-of-rxjs-sharing-operators-and-their-differences-3a03d699d255

你可以使用像 interval 这样的热 observable 和 map operator

import { interval } from 'rxjs';
import { map } from 'rxjs/operators';

const source = interval(1000).pipe(map(() => Math.random()));
const subscribe = source.subscribe(val => console.log(val));

已更新

您可以使用 multicast 运算符和 ReplaySubject

const source: any = interval(1000)
  .pipe(
    take(10),
    map(() => Math.random())
  )
  .pipe(multicast(new ReplaySubject()));

source.connect();

source.subscribe(val => console.log(1, val));
source.subscribe(val => console.log(2, val));