假设我有两个类,你可以观察一些可观察的类.
第一个例子,公共主题:
class EventsPub {
public readonly onEnd = new Subject<void>();
}
Run Code Online (Sandbox Code Playgroud)
第二个例子,私人主题和注册方法:
class EventsPriv {
private readonly endEvent = new Subject<void>();
public onEnd(cb: () => void): Subscription {
return this.endEvent.subscribe(cb);
}
}
Run Code Online (Sandbox Code Playgroud)
第一个示例在某种程度上是不安全的,因为任何人都可以eventsPub.endEvent.next()从类外调用并引入副作用,但是,与示例2相比它允许管道,这是一个很大的优势,因为开发人员可以为ex.只注册第一个事件eventsPub.onEnd.pipe(first()).subscribe(cb).
第二个例子也允许一次性订阅,但需要更多的代码和丑陋的取消订阅.
const subscription = eventsPriv.onEnd(() => {
// logic..
subscription.unsubscribe()
});
Run Code Online (Sandbox Code Playgroud)
从您的角度来看,哪种方式最好?或者也许有更好的解决方案?