如何从RxJS映射运算符抛出错误(angular)

前端之家收集整理的这篇文章主要介绍了如何从RxJS映射运算符抛出错误(angular)前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我想根据条件从我的observable的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块,因此它将被捕获,然后作为错误通知发送。

这意味着你不返回任何东西,只是抛出错误

.map(res => { 
  if (res.bearerToken) {
    return this.saveJwt(res.bearerToken); 
  } else {
    throw new Error('Valid token not returned');
  }
})

Observable.throw()是一个只发送错误通知的Observable,但map()并不关心你返回的内容。即使你从map()返回一个Observable,它也将作为下一个信号传递。

最后,您可能不需要使用.catch()。如果您在发生错误时需要执行任何副作用,最好使用do(null,err => console.log(err))。

猜你在找的Angularjs相关文章