如何从 RxJS 地图运算符(角度)引发错误

2024-01-01

我想从我的可观察对象中抛出一个错误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(使用前将#替换为@)

如何从 RxJS 地图运算符(角度)引发错误 的相关文章

随机推荐