Angular 7 (RxJs 6.x) - 如何使用throwError
Angular 7 (RxJs 6.x) - How to use throwError
我想在我的订阅者上使用第二个参数(错误)但不起作用。
我的 Observable 代码:
return Observable.create(obs => {
cognitoidentityserviceprovider.adminCreateUser(params, function(error, data) {
if (error) {
console.log(error);
return throwError(error || 'Server error');
} else {
console.log(data);
return obs.next(data.User);
}
});
});
我的 console.log(error);
还可以,但之后什么都没有(没有痕迹)。
我的订阅者代码:
this.myService.createUser(user).subscribe(
result => this.getUsers(),
error => this.errorUsersProcessor(error));
我的订阅者的第二个参数(错误)从不调用。
您应该能够使用管道和 catchError 运算符。你能试试下面的代码吗:
this.myService.createUser(user).pipe(
switchMap(response => this.getUsers()),
catchError(err => this.errorUsersProcessor(error))
);
来自文档:
抛出错误
Creates an Observable that emits no items to the Observer and immediately emits > an error notification.
所以我的猜测是 throwError 正在向一个新的观察者发出一个错误,而不是你订阅的观察者。
你可以尝试通知你是真正的观察者发出错误:
obs.error(error || new Error('Server error'));
我想在我的订阅者上使用第二个参数(错误)但不起作用。
我的 Observable 代码:
return Observable.create(obs => {
cognitoidentityserviceprovider.adminCreateUser(params, function(error, data) {
if (error) {
console.log(error);
return throwError(error || 'Server error');
} else {
console.log(data);
return obs.next(data.User);
}
});
});
我的 console.log(error);
还可以,但之后什么都没有(没有痕迹)。
我的订阅者代码:
this.myService.createUser(user).subscribe(
result => this.getUsers(),
error => this.errorUsersProcessor(error));
我的订阅者的第二个参数(错误)从不调用。
您应该能够使用管道和 catchError 运算符。你能试试下面的代码吗:
this.myService.createUser(user).pipe(
switchMap(response => this.getUsers()),
catchError(err => this.errorUsersProcessor(error))
);
来自文档: 抛出错误
Creates an Observable that emits no items to the Observer and immediately emits > an error notification.
所以我的猜测是 throwError 正在向一个新的观察者发出一个错误,而不是你订阅的观察者。
你可以尝试通知你是真正的观察者发出错误:
obs.error(error || new Error('Server error'));