【发布时间】:2018-07-05 00:37:44
【问题描述】:
假设我有两个类,您可以在其中观察一些可观察对象。
第一个例子,带有公共主题:
class EventsPub {
public readonly onEnd = new Subject<void>();
}
第二个例子,带有私有主题和注册方法:
class EventsPriv {
private readonly endEvent = new Subject<void>();
public onEnd(cb: () => void): Subscription {
return this.endEvent.subscribe(cb);
}
}
第一个示例在某种程度上是不安全的,因为任何人都可以从类外部调用 eventsPub.endEvent.next() 并引入副作用,但是,与示例 2 相比,它允许使用管道,这是一个很大的优势,因为开发人员可以使用 ex。仅使用eventsPub.onEnd.pipe(first()).subscribe(cb) 注册第一个活动。
第二个示例也允许一次性订阅,但需要更多代码和丑陋的取消订阅。
const subscription = eventsPriv.onEnd(() => {
// logic..
subscription.unsubscribe()
});
从您的角度来看,最好的方法是什么?或者也许有更好的解决方案?
【问题讨论】:
标签: javascript angular rxjs reactive-programming rxjs5