加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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

发布时间:2020-12-17 08:01:34 所属栏目:安全 来源:网络整理
导读:我想根据条件从我的observable的map运算符中抛出一个错误。例如,如果未收到正确的API数据。请参阅以下代码: private userAuthenticate( email: string,password: string ) { return this.httpPost(`${this.baseApiUrl}/auth?format=jsonprovider=login`,{u
我想根据条件从我的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))。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读