当 RxJs Subject 没有观察者时调用方法 [英] Invoke method when no observers for RxJs Subject

查看:57
本文介绍了当 RxJs Subject 没有观察者时调用方法的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

当所有观察者都取消订阅某个主题时如何调用方法.

How to invoke a method when all the observers have unsubscribed from a subject.

更新

const alphaStore = new BehaviourSubject(0);
observer1 = alphaStore.subscribe(console.log);
observer2 = alphaStore.subscribe(console.log);

当所有这些观察者都取消订阅时.我想要一个方法被调用.喜欢...

And when all of these observers unsubscribe. I want a method to be invoked. Like...

Observer1 取消订阅

Observer1 unsubscribed

Observer2 取消订阅

Observer2 unsubscribed

所有观察者离开

推荐答案

finalize() 运算符已经执行了您所描述的操作.更好的说法是 finalize() 在链处理时调用它的回调,这意味着它会在所有观察者取消订阅、链完成或错误时调用.

What you describe already does the finalize() operator. Better said finalize() calls its callback when the chain disposes which means it's called when all observers unsubscribes, the chain completes or errors.

const subject = new Subject();
const shared = subject.pipe(
  finalize(() => console.log('finalize')),
  share(),
);

https://stackblitz.com/edit/rxjs-rebfba

当所有观察者取消订阅 share() 取消订阅其源时触发 finalize().

When all observers unsubscribe share() unsubscribes from its source which triggers finalize().

目前无法区分为什么 finalize() 被调用.请参阅此问题 https://github.com/ReactiveX/rxjs/issues/2823以及如何操作的示例.

Currently there's no way to distinguish why finalize() was invoked. See this issue https://github.com/ReactiveX/rxjs/issues/2823 and examples there on how to do it.

这篇关于当 RxJs Subject 没有观察者时调用方法的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆