0

我是 angular4 的初学者,并试图理解 observable 和 subscription 的概念。

export class MyComponent implements OnInit {

    private subscription: Subscription 

    ngOnInit() {

      // case -1 -> service call 1 with subscription     

      this.subscription = this.service1.method1().subscribe(() => {});

     // case-2 -> service call 2 without subscription 

     this.service1.method2().subscribe(() => {});

    }  

现在很多时候我们不需要使用this.subscription(case-2),直接订阅即可调用服务。

我的问题是我们什么时候应该使用(在哪种情况下)变量,例如

private subscription: Subscription; 

哪个是最佳实践?

任何帮助/博客/文章都将是可观的。

谢谢

4

2 回答 2

1

Subscriptiontype 有一个函数叫做unsubscribe. 您需要使用unsubscribe手动完成 observable(大多数情况下是无限流)。如果 observable 没有完成,则 observable 的流不会被关闭,并且会发生内存泄漏。您可以在生命周期事件中编写取消订阅,ngOnDestroy并在组件销毁时取消订阅所有可观察对象。

HTTP 请求呢,在返回响应后会自动完成,所以不需要unsubscribe与 HTTP 请求一起使用。

您还可以在 Angular 中检查何时取消订阅

于 2018-04-24T06:29:11.647 回答
0

RxJs 库基于Observable 模式- 在这种模式中,您会一直关注源代码,例如更改或生成新值。股票价值不断变化或不断发送新价值的股票指数。

所以按照 Observable 模式

Observable - 是不断向您的程序发送价值的源,这些程序将要监听和处理它。

订阅- 订阅您的 observable ,它会向您发送价值,通过订阅,您表明您的程序正在列出来自源的价值,在这种情况下,您还处理即将到来的价值。

如果你理解了,你就能更清楚地理解事情Observable pattern


Subscription当您想自己管理下标时,即在您的代码中,要回答您需要的问题。

在订阅令牌的帮助下,您可以将您的代码与 observable 分离,即,如果您不想从 observable ie 源中获得更多价值,您应该通过调用 unsubscribe 方法来停止使用订阅。

文章:Angular:不要忘记取消订阅()帮助您了解令牌。

取消订阅源不要以避免内存泄漏。

于 2018-04-24T06:37:13.060 回答