Javascript RxJS Observable:在释放最后一个订阅时执行清理?

Javascript RxJS Observable:在释放最后一个订阅时执行清理?,javascript,rxjs,reactive-extensions-js,Javascript,Rxjs,Reactive Extensions Js,当处置RxJS可观测对象的上次订阅时,执行副作用的最干净方式是什么?这可能发生在可观察对象终止之前 假设我需要一个函数返回一个可观察的,该函数向资源发出更改。我想在处理完所有订阅后执行清理操作 var observable=streamResourceChanges(资源); var subscription1=可观察的订阅(observer1); var subscription2=可观察的订阅(observer2); // ... subscription1.dispose();//不执行清

当处置RxJS可观测对象的上次订阅时,执行副作用的最干净方式是什么?这可能发生在可观察对象终止之前

假设我需要一个函数返回一个
可观察的
,该函数向资源发出更改。我想在处理完所有订阅后执行清理操作

var observable=streamResourceChanges(资源);
var subscription1=可观察的订阅(observer1);
var subscription2=可观察的订阅(observer2);
// ...
subscription1.dispose();//不执行清理
subscription2.dispose();//执行清理
我发现定义订阅处置操作的唯一方法是使用。最后一次处置可以通过共享订阅来处理,例如与

例如:

功能流资源更改(资源){
返回Rx.Observable.create(函数(观察者){
//订阅资源更改的观察者。。。
//返回一个清理函数
返回函数(){
//在此处执行清理。。。
log(“已执行清理!”);
};
}).singleInstance();
}
是否有一种更简洁的方法来定义订阅处置的副作用,类似于
doOnNext
doOnCompleted
doOnError

var withCleanup=withoutCleanup.doOnDispose(函数(){
//在此处执行清理。。。
});

根据您的实际用例,您会想到两种选择:


谢谢使用
方法听起来像是
创建
的有效替代方法!
finally
回调仅在可观察对象终止时运行,这不一定是最后一次订阅被释放时的情况。对不起,我没有说得很具体;我编辑了我的问题。文档中没有很好地说明。Finally在处理订阅时实际调用该操作,包括在终止订阅期间或手动处理订阅时。我尝试了
Finally
,您完全正确!文档目前没有说明这种行为(而且对回调参数的描述也不正确)。所以,这正是我想要的!谢谢大家!
.finally()
已重命名为管道
source.finally(() => console.log("cleaning up")).singleInstance()
Rx.Observable
    .using(
        // allocate some disposable resource during subscribe.
        // resource.dispose() will be called during unsubscribe.
        () => new SomeResource(),

        // use the disposable resource to create your observable
        // for example...
        resource => Rx.Observable.interval(resource.time))
    .singleInstance();