我正在使用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”相同的错误处理方法。
预先感谢
答案 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>