我有一个简单的订阅,我想在结尾处执行更多的逻辑(无论是错误案例还是成功案例,这就是为什么我需要一个最终/完整的行为)。订阅看起来像这样:
this.service.call(x)
.subscribe(response => {
...
}, (error: HttpErrorResponse) => {
...
});
很奇怪,我没有完成最后的工作..我尝试了很多建议,例如
finally(()=> ...)在.subscribe
pipe(finalize()...)在.subscribe
a 3.当前订阅函数中的回调。(完整)
.add(()=> { });在.subscribe
到目前为止,他们都没有为我工作。我该怎么办?
奇怪的调用函数的内容(外部依赖项):
public readDetails(id: string): Observable<Details> {
return new Observable<Details>(subscriber => {
this.appConfig.getEndpoint('details').subscribe(
(endpoint: Endpoint) => {
const url = `${endpoint.toUrl()}/${id}`;
const headers = new HttpHeaders({
...
});
this.http.get<Details>(url, {headers})
.subscribe(
(response: Details) => {
subscriber.next(response);
},
(error) => {
subscriber.error(error);
}
);
},
error => subscriber.error(error)
);
});
}
答案 0 :(得分:1)
您的自定义可观察对象永远不会完成,因此永远不会调用您的finally回调。
您不应仅创建可观察的自定义链接两个呼叫。相反,学习使用RxJS运算符。由于RxJS 5已过时,因此我将在这里使用RxJS 6语法,但是翻译不难:
return this.appConfig.getEndpoint('details').pipe(
switchMap(endpoint => {
const url = `${endpoint.toUrl()}/${id}`;
const headers = new HttpHeaders({
...
});
return this.http.get<Details>(url, {headers});
});
});
答案 1 :(得分:1)
针对您的评论(comments-57008755),
在 rxJs v5.5之前,它被称为“ 最终”。
从v5.5开始,由于引入了可帮助摇树的管道运算符,因此将其重命名为“ 完成”(由于关键字限制)。
有关来源信息,请参见(here)。