RxJS Observableの最後のサブスクリプションが破棄されたときに副作用を実行する最もクリーンな方法は何ですか? これは、Observable が終了する前に発生する可能性があります。
Observable
リソースに変更を発行する を返す関数が必要だとしましょう。すべてのサブスクリプションが破棄されたときに、クリーンアップ アクションを実行したいと考えています。
var observable = streamResourceChanges(resource);
var subscription1 = observable.subscribe(observer1);
var subscription2 = observable.subscribe(observer2);
// ...
subscription1.dispose(); // Does not perform the cleanup
subscription2.dispose(); // Performs the cleanup
サブスクリプションの破棄アクションを定義する唯一の方法は、 を使用することRx.Observable.create
です。最後の破棄は、たとえば とサブスクリプションを共有することで処理できますObservable.prototype.singleInstance()
。
例えば:
function streamResourceChanges(resource) {
return Rx.Observable.create(function(observer) {
// Subscribe the observer for resource changes...
// Return a cleanup function
return function() {
// Perform cleanup here...
console.log("Cleanup performed!");
};
}).singleInstance();
}
doOnNext
または と同様に、サブスクリプションの破棄の副作用を定義するより適切な方法はありますdoOnCompleted
かdoOnError
?
var withCleanup = withoutCleanup.doOnDispose(function() {
// Perform cleanup here...
});