是否有更简单的方法来获取主题的最新值,执行一些修改并广播更改后的值?
这就是我目前的做法:
private currentMonthStream: Subject<Moment>;
private goNextMonth() {
this.currentMonthStream.first().subscribe((currentMonth) => {
this.currentMonthStream.next(currentMonth.add(1, 'months'));
});
}
编辑: 我发现这真的只对ReplaySubject和BehaviorSubject有意义,并且选择创建我自己的ReplaySubject实现,可以很容易地做到这一点:
export class StreamSubject<T> extends ReplaySubject<T> {
constructor() {
super(1);
}
update(fn: (val: T) => T) {
this.first().subscribe((val) => {
this.next(fn(val));
});
}
}
然而,由于我还是rx的新手,需要这样的函数是否有问题?
答案 0 :(得分:0)
对于正常主题(即由new Rx.Subject()
创建),作为主题也是可观察的,您也可以使用withLatestFrom
(不知道它是否已经进入Rxjs v5 beta)获得该主题的最新价值。要发出新值,请使用next
或onNext
,具体取决于您使用的Rx版本。
有更简单的方法吗?
可能还有其他方式,包括使用主题进行信号传递而非持有价值的方式,可以说这是否更简单。
我还是rx的新手,需要这样的功能有什么问题吗?
这个问题需要自以为是和主观的答案。也就是说,有一般建议使用主题作为最后的手段(可能是一个难以阅读的):http://davesexton.com/blog/post/To-Use-Subject-Or-Not-To-Use-Subject.aspx。
所以我会把你的问题转化为:有没有办法在不使用主题的情况下实现这个功能?有时你可以,有时你不能。