缓存来自 BehaviorSubject 的管道结果

Eri*_*ton 4 rxjs

使用 rxjs,我有一个昂贵的计算来映射来自 a 的结果BehaviorSubject

const obs$ = sameBehaviorSubject.pipe(map(expensiveComputation));
Run Code Online (Sandbox Code Playgroud)

然后在我的代码的多个其他部分中,我订阅了该 observable。每次我订阅时,它都会重新运行expensiveComputation。我怎样才能防止这种情况?

siv*_*636 5

您可以使用 shareReplay:

const obs$ = sameBehaviorSubject.pipe(map(expensiveComputation), shareReplay(1));
Run Code Online (Sandbox Code Playgroud)

现在您可以obs$多次订阅而无需expensiveComputation多次订阅。