gpt4 book ai didi

javascript - RxJS 可观察到的 : performing cleanup when the last subscription is disposed?

转载 作者:数据小太阳 更新时间:2023-10-29 03:48:29 25 4
gpt4 key购买 nike

当 RxJS Observable 的last subscription 被释放时,执行副作用的最干净的方法是什么?这可能发生在 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();
}

有没有更简洁的方法来定义订阅处置的副作用,类似于 doOnNextdoOnCompleteddoOnError

var withCleanup = withoutCleanup.doOnDispose(function() {
// Perform cleanup here...
});

最佳答案

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

.finally()

source.finally(() => console.log("cleaning up")).singleInstance()

.using()

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();

关于javascript - RxJS 可观察到的 : performing cleanup when the last subscription is disposed?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33353869/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com