对 subscribe() 和 unsubscribe() 的操作
Action on subscribe() and unsubscribe()
在 RxJS 中,我想在观察者订阅 Observable 和取消订阅时采取一些特殊操作。我当然可以覆盖 subscribe()
和 unsubscribe()
方法,但这看起来很粗糙。
在创建可观察对象的过程中,是否有一种方法可以提供每当有人 subscribes/unsubscribes 时就会调用的回调?
BR,
丹尼尔
这就是 Observable.create
的用途。您可以使用指定的 attach/detach 处理程序创建自己的 observable,甚至可以仅用 2 行额外的代码包装现有的 observable。
const obs = Rx.Observable.create(observer => {
console.log('attach');
// If you want to wrap another observable, call this:
// const subs = other.subscribe(observer);
return () => {
// subs.unsubscribe();
console.log('detach');
};
});
console.log('subscribe subscription1');
const subscribtion1 = obs.subscribe(() => {});
console.log('subscribe subscription2');
const subscribtion2 = obs.subscribe(() => {});
setTimeout(() => {
console.log('subscribtion1.dispose()');
subscribtion1.unsubscribe();
}, 500);
setTimeout(() => {
console.log('subscribtion2.dispose()');
subscribtion2.unsubscribe();
}, 1000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.0.0-rc.4/Rx.js"></script>
在 RxJS 中,我想在观察者订阅 Observable 和取消订阅时采取一些特殊操作。我当然可以覆盖 subscribe()
和 unsubscribe()
方法,但这看起来很粗糙。
在创建可观察对象的过程中,是否有一种方法可以提供每当有人 subscribes/unsubscribes 时就会调用的回调?
BR,
丹尼尔
这就是 Observable.create
的用途。您可以使用指定的 attach/detach 处理程序创建自己的 observable,甚至可以仅用 2 行额外的代码包装现有的 observable。
const obs = Rx.Observable.create(observer => {
console.log('attach');
// If you want to wrap another observable, call this:
// const subs = other.subscribe(observer);
return () => {
// subs.unsubscribe();
console.log('detach');
};
});
console.log('subscribe subscription1');
const subscribtion1 = obs.subscribe(() => {});
console.log('subscribe subscription2');
const subscribtion2 = obs.subscribe(() => {});
setTimeout(() => {
console.log('subscribtion1.dispose()');
subscribtion1.unsubscribe();
}, 500);
setTimeout(() => {
console.log('subscribtion2.dispose()');
subscribtion2.unsubscribe();
}, 1000);
<script src="https://cdnjs.cloudflare.com/ajax/libs/rxjs/5.0.0-rc.4/Rx.js"></script>