gpt4 book ai didi

angular - 订阅 Angular 2 Http 两次?

转载 作者:行者123 更新时间:2023-12-01 08:20:33 28 4
gpt4 key购买 nike

我想要一个用于调用 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com