我通过了一个看起来像这样的方法:
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()
吗?我是否错过了更好的模式?
答案 0 :(得分:3)
您需要在某个地方进行订阅,因为没有订阅,您的可观察项将保持冷。可观察的对象是懒惰的,除非有人关心答案(使它们成为热门),否则它们不会起作用。因此,是的,这还可以(并且可以预期),尽管我会质疑为什么鉴于您将其退回,因此链中没有人订阅obs$
。
严格来说,您不需要unsubscribe
,因为这两种方法都应完成其Observable
。如果可观察对象仍然很热,您只需要 退订,但是您不再关心结果。