rxjs - 观察流何时取消订阅

标签 rxjs rxjs5

我有一个 RxJS 可观察流,如下所示:

var sub = Observable.create(obs => {
    // logic here

    return () => {
        // call rest service to notify server
    };
})
.publish()
.refCount();

当最后一个订阅者取消订阅时,我需要发出 REST 请求。显而易见的选择是将该调用添加到 return 清理函数中 - 但这样您就打破了任何可观察的序列,并且任何错误等都不容易处理。

我可以使用一个 Subject,在清理函数中将一个值推送到它上面,然后在其他地方观察它,并挂起 REST 调用。

理想情况下,我会做一些事情,比如通过 REST 调用连接到已处理的流(concat 显然不起作用,因为它没有完成)。

有人对处理这个问题的最干净的方法有什么建议吗?上面的所有选项看起来都有点笨拙,我觉得我错过了一些东西。

最佳答案

您可以实现 finally(...)在您的流中,它会进行清理。 当流完成(错误或完成)时,finally 会自动执行。

注意:当您手动取消订阅并且未在直播中调用complete时,此操作将不起作用

关于rxjs - 观察流何时取消订阅,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42134817/

相关文章:

angular - Observable<Object[]> - 我可以跳过/接受吗?

javascript - Ngfor 没有在重新加载页面上实现(Angular + RXJS)

javascript - RxJS 5 refCount() 连接或取消订阅源时的执行逻辑

angular - RxJS 顺序操作

angular - RxJS 订阅内部订阅,并在错误时执行操作

javascript - 带有 RX.Js 5.0.0 拉取 'Not Defined' 错误的 JSBIN 项目

switch-statement - 这个 RxJS 示例中的 switch 语句有什么作用?

rxjs - 为什么没有 onComplete() rxjs 运算符?

javascript - 使用 RxJS 合并未知数量的可观察对象

rxjs - 切换到 rxjs 7 后,找不到模块 'rxjs' 或其对应的类型声明