angular - 订阅 Angular 2 Http 两次?

标签 angular rxjs angular2-http

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

当然,当我订阅从 Http 返回的可观察对象时,它会被调用一次,当我返回它并且调用者订阅它时,它会再次被调用。能够在两个地方监听结果而不执行两次 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;
}

最佳答案

使用share太过分了。如果您只想内联处理错误,可以使用 do 代替:

return this.http.post(path, s, { headers: headers })
   .do(null, err => this.appErrorsService.addApiError(err));

关于angular - 订阅 Angular 2 Http 两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36780541/

相关文章:

Angular:找不到不同的支撑对象 '[object Object]'

Angular 2 - 缓存http获取结果

angular - 无法绑定(bind)到 'ngIf',因为它不是 'div' 的已知属性。 (不重复)

typescript - 如何在类型安全的同一组件上实现 OnInit 和 OnChanges

javascript - 使用 RXJS 从函数调用中生成流

RxJS 过滤数组数组

javascript - RxJS:单击后在持续时间内禁用刷新按钮

html - 在单个页面中处理多个 NgbPagination

angular - CRUD 应用程序中的 Action /效果/缩减器数量过多

javascript - 带有自定义 header 的 Angular 2 Http 出现 405