我正在使用以下代码进行获取请求:
makeGetReq$(url:string):Observable{
let getReqObservable;
getReqObservable = this.httpClient.get(url) //code for making get request
return getReqObservable
}
问题是有时我的后端可能返回状态代码为200的{error:true, message}
。(我知道这很奇怪)。在这种情况下,我想了解getReqObservable
并不允许其订阅回调运行。 / p>
image.component.ts
makeGetReq$(url:string):Observable{
let getReqObservable;
getReqObservable = this.httpClient.get(url)//code for making get request
return getReqObservable
.do((value)=>{
if(value.error){
//do not allow it to propagate further
})
})
答案 0 :(得分:1)
您应将其进一步传播,但应将其传播为错误而不是事件(例如,就像后端执行正确的操作并返回错误响应一样):
makeGetReq$(url: string): Observable<Something> {
return this.httpClient.get<Something>(url).pipe(
mergeMap(value => value.error ? throwError(value) : of(value))
);
}
否则,调用方法无法知道发生了错误,因此无法执行可能已为错误注册的回调。
答案 1 :(得分:0)
最简单的方法可能是filter
。
仅通过发出满足指定谓词的项来过滤源发出的项。
它看起来像这样:
return getReqObservable
.filter(value => !value.error)
有人指出,如果仅过滤掉错误情况,您将完全丢失通知。当然,可以选择使用throwError
创建RxJS错误通知,但是也可以使用不同的过滤条件只订阅第二次可观察到的相同源。
但是请注意不要两次调用后端,例如通过使用share
。