将失败的 Observable 转化为好的 Observable
Convert failing Observable into a good one
我调用了一个 HTTP 服务,该服务 return 是一个可观察对象(它是第三方库的一部分,所以我无法更改其内部代码)并且它在订阅用例时抛出错误我想在快乐的道路上处理。
我有这样的东西:
我的服务class:
class MyService {
getEntities(): Observable<any> {
return this.http.get('<the url'>)
.pipe(
catchError(err => {
// Handle the errors and returns a string corresponding to each message.
// Here I show an example with the status code 403
if (err.status === 403) {
return throwError('My error message for 403');
}
// This is what I want to do.
if (err.status === 409) {
// Somehow, make this to trigger the goodResponse in the consumer class.
}
})
);
}
}
我的消费者:
class MyComponent {
private myService: MyService;
constructor() {
this.myService = new MyService();
}
callTheAPI() {
this.myService.getEntities()
.subscribe(goodResponse => {
// Handle good response
}, error => {
// Handle error
});
}
}
所以,对于当前的代码示例,我想做的是,对于状态码为409的情况,让订阅成功。
然后 return 一个新的 Observable(发送 next
项)。 throwError
仅发送 error
通知,因此您可以使用 of()
:
import { of } from 'rxjs';
...
catchError(err => {
// Handle the errors and returns a string corresponding to each message.
// Here I show an example with the status code 403
if (err.status === 403) {
return throwError('My error message for 403');
}
// This is what I want to do.
if (err.status === 409) {
return of(/* fake response goes here */)
}
})
我调用了一个 HTTP 服务,该服务 return 是一个可观察对象(它是第三方库的一部分,所以我无法更改其内部代码)并且它在订阅用例时抛出错误我想在快乐的道路上处理。
我有这样的东西:
我的服务class:
class MyService {
getEntities(): Observable<any> {
return this.http.get('<the url'>)
.pipe(
catchError(err => {
// Handle the errors and returns a string corresponding to each message.
// Here I show an example with the status code 403
if (err.status === 403) {
return throwError('My error message for 403');
}
// This is what I want to do.
if (err.status === 409) {
// Somehow, make this to trigger the goodResponse in the consumer class.
}
})
);
}
}
我的消费者:
class MyComponent {
private myService: MyService;
constructor() {
this.myService = new MyService();
}
callTheAPI() {
this.myService.getEntities()
.subscribe(goodResponse => {
// Handle good response
}, error => {
// Handle error
});
}
}
所以,对于当前的代码示例,我想做的是,对于状态码为409的情况,让订阅成功。
然后 return 一个新的 Observable(发送 next
项)。 throwError
仅发送 error
通知,因此您可以使用 of()
:
import { of } from 'rxjs';
...
catchError(err => {
// Handle the errors and returns a string corresponding to each message.
// Here I show an example with the status code 403
if (err.status === 403) {
return throwError('My error message for 403');
}
// This is what I want to do.
if (err.status === 409) {
return of(/* fake response goes here */)
}
})