我想从我的可观察对象中抛出一个错误map基于条件的运算符。例如,如果未收到正确的 API 数据。请看下面的代码:
private userAuthenticate( email: string, password: string ) {
return this.httpPost(`${this.baseApiUrl}/auth?format=json&provider=login`, {userName: email, password: password})
.map( res => {
if ( res.bearerToken ) {
return this.saveJwt(res.bearerToken);
} else {
// THIS DOESN'T THROW ERROR --------------------
return Observable.throw('Valid token not returned');
}
})
.catch( err => Observable.throw(this.logError(err) )
.finally( () => console.log("Authentication done.") );
}
基本上正如您在代码中看到的,如果响应(res
对象)没有bearerToken
我想抛出一个错误。因此,在我的订阅中,它进入第二个参数(handleError
) 如以下所说的。
.subscribe(success, handleError)
有什么建议么?
只需将错误放入map()
操作员。 RxJS 中的所有回调都用 try-catch 块包装,因此它将被捕获,然后作为error
通知。
这意味着您不会返回任何内容,只是抛出错误:
map(res => {
if (res.bearerToken) {
return this.saveJwt(res.bearerToken);
} else {
throw new Error('Valid token not returned');
}
})
The throwError()
(以前的Observable.throw()
在 RxJS 5 中)是一个 Observable,它只发送一个error
通知但是map()
不在乎你返回什么。即使你返回一个 Observablemap()
它将被传递为next
通知。
最后一件事,你可能不需要使用.catchError()
(以前的catch()
在 RxJS 5) 中。如果发生错误时需要执行任何副作用,最好使用tap(null, err => console.log(err))
(以前的do()
以 RxJS 5) 为例。
2019 年 1 月:更新了 RxJS 6
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)