Kim*_*mmo 9 javascript reactive-extensions-js rxjs
在处理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
Run Code Online (Sandbox Code Playgroud)
我发现定义订阅处理操作的唯一方法是使用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();
}
Run Code Online (Sandbox Code Playgroud)
有没有更简洁的方法来定义订阅处置的副作用,类似于doOnNext,doOnCompleted或doOnError?
var withCleanup = withoutCleanup.doOnDispose(function() {
// Perform cleanup here...
});
Run Code Online (Sandbox Code Playgroud)
Bra*_*don 13
根据您的实际使用情况,我会想到两个选择:
source.finally(() => console.log("cleaning up")).singleInstance()
Run Code Online (Sandbox Code Playgroud)
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();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5591 次 |
| 最近记录: |