订阅两次 Angular 2 Http?
Subscribe twice to Angular 2 Http?
我想要一个调用 API 的服务,该服务可以正确处理请求并对 API 请求执行标准错误处理。例如,我有一个 ApiErrorsService
,我想在任何 API 调用出错时调用它。我还想以标准方式提交调用,即将 Content-Type 设置为 application/json 并序列化请求对象。
当然,当我从 Http
订阅可观察对象 return 时,它会被调用一次,而当我 return 它和调用者订阅它时,它会再次被调用。在不执行两次 API 调用的情况下能够在两个地方收听结果的最佳方法是什么?我可以只调用 .publish()
或 .share()
和 return 吗?我需要处理它吗?是否有任何可能发生的时间问题?如果我立即模拟 API 调用和 return 一个值,它会正常工作,还是调用者的订阅会错过这些值?这是我的代码:
post(path: string, data: any): Observable<Response> {
var headers: Headers = new Headers();
headers.set("Content-Type", "application/json");
var s = data == null ? null : JSON.stringify(data, null, 2);
var shared = this.http.post(path, s, { headers: headers }).share();
shared.subscribe(null, err => this.appErrorsService.addApiError(err));
return shared;
}
使用share就够了,http Observable自动完成,不用退订。除非您要在异步方法中订阅第二个侦听器,否则没有办法丢失值 (setTimeout/etc)。
使用 share
太过分了。如果你只是想处理内联错误,你可以使用 do
代替:
return this.http.post(path, s, { headers: headers })
.do(null, err => this.appErrorsService.addApiError(err));
我想要一个调用 API 的服务,该服务可以正确处理请求并对 API 请求执行标准错误处理。例如,我有一个 ApiErrorsService
,我想在任何 API 调用出错时调用它。我还想以标准方式提交调用,即将 Content-Type 设置为 application/json 并序列化请求对象。
当然,当我从 Http
订阅可观察对象 return 时,它会被调用一次,而当我 return 它和调用者订阅它时,它会再次被调用。在不执行两次 API 调用的情况下能够在两个地方收听结果的最佳方法是什么?我可以只调用 .publish()
或 .share()
和 return 吗?我需要处理它吗?是否有任何可能发生的时间问题?如果我立即模拟 API 调用和 return 一个值,它会正常工作,还是调用者的订阅会错过这些值?这是我的代码:
post(path: string, data: any): Observable<Response> {
var headers: Headers = new Headers();
headers.set("Content-Type", "application/json");
var s = data == null ? null : JSON.stringify(data, null, 2);
var shared = this.http.post(path, s, { headers: headers }).share();
shared.subscribe(null, err => this.appErrorsService.addApiError(err));
return shared;
}
使用share就够了,http Observable自动完成,不用退订。除非您要在异步方法中订阅第二个侦听器,否则没有办法丢失值 (setTimeout/etc)。
使用 share
太过分了。如果你只是想处理内联错误,你可以使用 do
代替:
return this.http.post(path, s, { headers: headers })
.do(null, err => this.appErrorsService.addApiError(err));