使用RxJS和Angular异步管道处理错误

时间:2019-05-11 09:41:41

标签: angular rxjs

我正在使用Angular和RxJS制作一些响应式应用程序。我最近发现,以良好的方式使用响应式编程不会涉及“ .subscribe”,这更像是命令式编程(手动提取数据)。

我现在正尝试在RxJS中使用Angular中的Async管道,并且它工作良好,可以异步检索数据。

但是如何像使用“ .subscribe”一样捕获错误:

    this.http.getUsers().subscribe(
(success) => console.log(success) // everything is good
(error) => console.log(error) // an error happened 
)

在反应模式下,代码更像

this.http.getUsers().pipe(

switchMap(value => console.log(value))

); // no clue to handle errors with using subscribe

即使第二种方法更具反应性,我希望我能找到一种与“ .subscribe”相同的错误处理方法。

预先感谢

1 个答案:

答案 0 :(得分:1)

您可以创建一个填充错误的主题。

errorObs = new Subject()

result = this.http.getUsers().pipe(
    switchMap(value => console.log(value); //must return an Observable),
    catchError(e => {
        this.errorObs.next(true)
        return throwError(e)
    })
);

您的模板将类似于:

<ng-container *ngIf="result | async"> 
    success data
</ng-container>

<ng-container *ngIf="errorObs | async">
     error data
</ng-container>