【问题标题】:Non-completing observables未完成的 observables
【发布时间】:2022-02-03 01:55:28
【问题描述】:

在我的应用程序的某个地方,我有一个必须返回 Observable 的函数。大多数情况下,这可以正常工作,但在某些情况下,实际上不可能提供有意义的结果。如果是这种情况,调用者也不会对结果做任何事情。

因为结果是什么并不重要,所以我在这里返回new Observable()。如果我什么都不返回(比如return;),我会得到一个错误,所以我必须返回一个 Observable。

我担心的是让这样的 Observables 永远不会完成。在 Observable 的生命周期结束时,subscriber.complete() 用于指示 Observable 不再做任何事情。如果我不这样做,是否会导致任何严重的问题,例如内存泄漏?

【问题讨论】:

    标签: angular rxjs observable


    【解决方案1】:

    Observable 有很多种:

    • 有限(如 Http 请求)
    • 无限

    无限类型允许内存泄漏或一些“奇怪”问题,因为依赖于像重放一样使用的可观察对象。

    现在返回 observable who complete() 而不发出 next() 值:

    return EMPTY;
    

    如果需要通过next():

    return of({});
    

    Return an empty Observable

    我的建议是在管道中使用 takeUntil 来取消订阅以避免内存泄漏。

    https://blog.bitsrc.io/6-ways-to-unsubscribe-from-observables-in-angular-ab912819a78f

    【讨论】:

      【解决方案2】:

      有一个 RxJS 常量 observable 可以立即完成。它叫EMPTY

      所以只需返回EMPTY。它在语义上也会更清晰。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-05-22
        • 1970-01-01
        • 1970-01-01
        • 2023-03-30
        • 1970-01-01
        • 1970-01-01
        • 2019-05-11
        相关资源
        最近更新 更多