Angular 处理角度http调用并将结果传递给订户的正确方法
我想在我的应用程序中使用服务发出请求。我希望按照通常的行为将订阅传递给调用者,但我也希望能够拦截结果,对其采取行动,但不改变它,然后继续 例如:Angular 处理角度http调用并将结果传递给订户的正确方法,angular,rxjs,rxjs5,Angular,Rxjs,Rxjs5,我想在我的应用程序中使用服务发出请求。我希望按照通常的行为将订阅传递给调用者,但我也希望能够拦截结果,对其采取行动,但不改变它,然后继续 例如: return this.http.get<LicenseKeyAndUsageModel>('api/license') .map(data => { this.hasValidLicenseKeyInternal.next(!data.isExpired); return data;
return this.http.get<LicenseKeyAndUsageModel>('api/license')
.map(data => {
this.hasValidLicenseKeyInternal.next(!data.isExpired);
return data;
})
.catch((error: HttpErrorResponse) => {
if (error.status === 404) {
this.hasValidLicenseKeyInternal.next(false);
return Observable.throw(new LicenseKeyMissingError());
}
else
return Observable.throw(error);
});
返回此.http.get('api/license')
.map(数据=>{
this.hasValidLicenseKeyInternal.next(!data.isExpired);
返回数据;
})
.catch((错误:HttpErrorResponse)=>{
如果(error.status==404){
this.hasValidLicenseKeyInternal.next(false);
返回可观察的.throw(new-LicenseKeyMissingError());
}
其他的
返回可观察抛出(错误);
});
因此,在本例中,我将检索当前许可证密钥,并更新服务级别值,以确定许可证密钥是否有效,同时仍将结果传递给原始订户
基本上,这似乎是正确的方法吗?或者我应该做一些更“可观察”的事情,比如多播或其他什么吗?这就是do()
操作符(或RxJS 5.5中的tap()
)的意图
确实,您也可以使用map()
进行此操作,但您需要记住始终返回原始值。另外,您想要的似乎是一种“副作用”(您想要执行影响可观察链之外的应用程序状态的操作),这就是do()
的目的。这就是do()
操作符(或RxJS 5.5中的tap()
的目的
确实,您也可以使用
map()
进行此操作,但您需要记住始终返回原始值。另外,您想要的似乎是一种“副作用”(您想要执行影响可观察链之外的应用程序状态的操作),这就是do()
的目的。Rxjstap
就是您想要的
查看更多信息
很抱歉,没有在手机上发布一个大的答案。Rxjs
tap
是您想要的
查看更多信息
很抱歉没有在手机上发布一个大的答案。我想这是你想要的,而不是
地图。
:。我想这是你想要的,而不是地图。
:。guess@martin已经回答了。无论如何,如果这个链接有用的话,guess@martin已经回答了。无论如何,如果这个链接有用的话