【发布时间】:2017-03-09 00:38:26
【问题描述】:
我有一个订阅,我想在一段中间件代码中使用它来发出事件信号。所以我有一个想要订阅 observable 的东西,还有一个不完全是 observable 的东西。
我考虑过为此使用主题 - 这就是它们的用途:
const repeater = new Rx.Subject();
function subscribe(observer) {
return repeater.subscribe(observer);
}
// in some other function, call repeater.next(val)
但后来我开始查看常规 subscribe() 调用返回的内容。我可以这样做:
let sub = null;
function subscribe(observer) {
return Rx.Observable.create((o) => sub = o);
}
// elsewhere sub.next(val)
还有吗?
let unsub = null;
function subscribe(observer) {
unsub = Rx.Observable.create(() => false).subscribe(observer)
}
// elsewhere unsub.next(val)
所有这些都会向订阅者发送 val 信号。我在这里不明白的奇怪之处是订阅返回有一个可用的next() - 我认为next() 只存在于 Observable 上下文中的观察者身上。
无论如何,我都需要处理取消订阅的问题 - 当中间件被拆除时,我需要发出流完成信号并释放一些资源。令我惊讶的是,unsub 下一个功能正常。
这向我表明,在观察者、可观察对象和主题等方面,有些 RxJS 是我还没有理解的。一般来说,我了解如何将事件源和其他类似的东西连接到可观察的流中。它实际上只是在从一个无聊的函数调用中构建一个可观察流的上下文中 - 每当外部库调用该函数时,这个流都会发出一个更新的 observable 信号。
【问题讨论】: