如果ReplaySubject在RXJS中没有发出任何值,则startWith操作符。
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如果ReplaySubject在RXJS中没有发出任何值,则startWith操作符。相关的知识,希望对你有一定的参考价值。
我有一个如下的重播主题。
@Injectable()
export class ViewByService implements OnDestroy {
private _selectedViewBy$ = new ReplaySubject<ViewByContext>(1);
public selectedViewBy$ = this._selectedViewBy$.asObservable();
constructor() {}
setViewBy(viewBy: ViewByContext): void {
this._selectedViewBy$.next(viewBy);
}
ngOnDestroy(): void {
this._selectedViewBy$.complete();
}
}
当我在发出值后订阅时,我得到的最后一个值是我的期望值 bufferCount
是1.
我需要什么
在消费者方面,当我在订阅这个。ReplaySubject
如果它有比我更早发出的值,我应该得到最后一个值,但如果我没有发出任何值从这个 ReplaySubject
那么我想 startWith
一些默认值。但我的 startWith
只有在没有从 ReplaySubject
.
现在,当我这样做,
this.viewByService.selectedViewBy$.pipe(
startWith({ code: 'DEFAULT'})
)
当我没有任何值从 ReplaySubject
我在推 DEFAULT
这很好,但当我在我的 ReplaySubject
然后,我看到它正在推动两个 DEFAULT
和之前发出的值。
我们如何有条件地运行 startWith
只要 ReplaySubject
之前没有发出过任何数值。
谢谢。
你可以考虑使用 BehaviorSubject
结合 shareReply
操作员,像这样
const b = new BehaviorSubject<any>({ code: 'DEFAULT'});
const s = b.pipe(shareReplay(1));
如果 b
在您认购之前就会发出,那么当您认购时,就会发出 shareReply
确保你得到最后发出的值。
如果您在 b
发出的任何值,当你订阅时,你会得到在 BehaviorSubject
构造者。
以上是关于如果ReplaySubject在RXJS中没有发出任何值,则startWith操作符。的主要内容,如果未能解决你的问题,请参考以下文章
RxJs。如果我有两个 observable,如何抛出错误并继续发出值?
在注册之前验证可观察的响应以执行多个请求(iff)-RxJs