处理 angular 2 服务中的 Observable 错误
Handling Observable errors in angular 2 servcie
我有一个调用授权服务的登录服务,我需要捕获从 api 服务器返回的任何错误。
目前我的 login.component 中有这个:
loginUser() {
console.log(this.localUser.email);
console.log(this.localUser.password);
this.loginService.loginUser(this.localUser)
.subscribe(
token => {
console.log('token = ' + token)
this.token = token},
error => {
this.errorMessage = <any>error
console.log("err msg = " + this.errorMessage);
},
() => this.completeLogin());
}
这是我的登录服务:
loginUser(localUser: LocalUser) {
return this.authorizationService.loginUser(localUser);
}
这是我的身份验证服务:
loginUser(localUser: LocalUser): Observable<Token> {
var grantString: string = "grant_type=password&username=";
var passwordString : string = "&password="
var email = localUser.email;
var password = localUser.password;
var headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
var creds:string = grantString + email + passwordString + password;
return this.http.post(this.url, creds, { headers: headers })
.retry(2)
.timeout(20000, new Error('Timeout expired.'))
.delay(1000)
.map((response: Response) => <Token>response.json())
.catch(this.handleError);
}
handleError(error: any) {
let errorMsg = error.message || 'Server error';
console.error(errorMsg);
return Observable.throw(errorMsg);
}
问题是返回的err信息不是服务器错误,而是这个:
"err msg = TypeError: Object doesn't support property or method 'throw'"
关于如何获取真实消息有什么想法吗?
很可能您缺少 rxjs 的导入 'throw' static。
如果您自己一个一个地导入 rxjs 运算符和静态变量,就会发生这种情况。
// 静态
导入 'rxjs/add/observable/throw';
查看完整列表:
https://github.com/ReactiveX/rxjs/blob/master/src/Rx.ts
我有一个调用授权服务的登录服务,我需要捕获从 api 服务器返回的任何错误。
目前我的 login.component 中有这个:
loginUser() {
console.log(this.localUser.email);
console.log(this.localUser.password);
this.loginService.loginUser(this.localUser)
.subscribe(
token => {
console.log('token = ' + token)
this.token = token},
error => {
this.errorMessage = <any>error
console.log("err msg = " + this.errorMessage);
},
() => this.completeLogin());
}
这是我的登录服务:
loginUser(localUser: LocalUser) {
return this.authorizationService.loginUser(localUser);
}
这是我的身份验证服务:
loginUser(localUser: LocalUser): Observable<Token> {
var grantString: string = "grant_type=password&username=";
var passwordString : string = "&password="
var email = localUser.email;
var password = localUser.password;
var headers = new Headers();
headers.append('Content-Type', 'application/x-www-form-urlencoded');
var creds:string = grantString + email + passwordString + password;
return this.http.post(this.url, creds, { headers: headers })
.retry(2)
.timeout(20000, new Error('Timeout expired.'))
.delay(1000)
.map((response: Response) => <Token>response.json())
.catch(this.handleError);
}
handleError(error: any) {
let errorMsg = error.message || 'Server error';
console.error(errorMsg);
return Observable.throw(errorMsg);
}
问题是返回的err信息不是服务器错误,而是这个: "err msg = TypeError: Object doesn't support property or method 'throw'"
关于如何获取真实消息有什么想法吗?
很可能您缺少 rxjs 的导入 'throw' static。
如果您自己一个一个地导入 rxjs 运算符和静态变量,就会发生这种情况。
// 静态
导入 'rxjs/add/observable/throw';
查看完整列表:
https://github.com/ReactiveX/rxjs/blob/master/src/Rx.ts