Каков самый простой способ выполнить побочный эффект при удалении последней подписки для 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...
});