2

我想要一个调用 API 的服务,该 API 可以正确处理请求并对 API 请求执行标准错误处理。例如ApiErrorsService,当任何 API 调用出错时,我想调用它。我还想以标准方式提交调用,即将 Content-Type 设置为 application/json 并序列化请求对象。

当然,当我订阅从Http它返回的 observable 时,它​​会被调用一次,当我返回它并且调用者订阅它时,它会再次被调用。在不执行两次 API 调用的情况下,能够在两个地方监听结果的最佳方式是什么?我可以打电话.publish().share()退回吗?我需要然后处理它吗?是否会出现任何时间问题?如果我模拟 API 调用并立即返回一个值,那会正常工作,还是调用者的订阅会错过这些值?这是我的代码:

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;
}
4

2 回答 2

3

使用share是矫枉过正。如果您只想内联处理错误,则可以do改用:

return this.http.post(path, s, { headers: headers })
   .do(null, err => this.appErrorsService.addApiError(err));
于 2016-04-22T08:01:23.713 回答
2

使用share就够了,http Observable自动完成,不用退订。除非您要在异步方法(setTimeout/etc)中订阅第二个侦听器,否则无法错过值。

于 2016-04-21T21:34:05.663 回答