Angular 2 HttpClient需要.subscribe

时间:2018-07-02 19:05:03

标签: angular angular2-observables angular-httpclient

我通过了一个看起来像这样的方法:

add = (): Observable<MatDialogRef<W, any>> => {
  let obs$ = this.service.getNew$().pipe(map(result => {
    this.applyNewItemProperties(result);
    return this.openDialog(result);
  }));

  obs$.subscribe();

  return obs$;
}

getNew$()本质上是对return HttpClient.get<T>的调用。

我的问题是:可以吗?我不需要订阅,除非没有订阅,否则get不会触发。我需要在某个地方unsubscribe()吗?我是否错过了更好的模式?

1 个答案:

答案 0 :(得分:3)

您需要在某个地方进行订阅,因为没有订阅,您的可观察项将保持。可观察的对象是懒惰的,除非有人关心答案(使它们成为热门),否则它们不会起作用。因此,是的,这还可以(并且可以预期),尽管我会质疑为什么鉴于您将其退回,因此链中没有人订阅obs$

严格来说,您不需要unsubscribe,因为这两种方法都应完成其Observable。如果可观察对象仍然很热,您只需要 退订,但是您不再关心结果。