【发布时间】:2019-11-22 07:27:00
【问题描述】:
我有一个简单的订阅,我想在最后执行一些逻辑(在错误和成功的情况下,这就是为什么我需要最终/完整的行为)。订阅如下所示:
this.service.call(x)
.subscribe(response => {
...
}, (error: HttpErrorResponse) => {
...
});
奇怪的是我没有得到最后的工作..我已经尝试了很多建议,比如
finally(() => ...) 在 .subscribe 之前
pipe(finalize()...) 在 .subscribe 之前
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)
);
});
}
【问题讨论】:
-
您确定
call()完成了吗?你能分享call()的代码吗? -
实际上当我让方法保持原样时,我的订阅(或错误函数)被调用,并且应用程序正常工作..我将编辑调用函数内容的问题
-
finally 回调被调用... finally,即当流完成或出错时。如果它是一个无限流,finally 回调将永远不会被调用。如果您添加了一个完整的回调并且它从未被调用,这意味着您的流是无限的(或者至少您没有等待足够长的时间来看到它完成)。
-
readDetails 函数应该如何/应该返回一个完成?