angular – Obepable因错误而关闭
发布时间:2020-12-17 17:08:45 所属栏目:安全 来源:网络整理
导读:我在Angular 2中遇到了Observable的问题. 我将我的组件订阅到一个observable,然后当我的服务有新值时,我的组件会被通知. 问题是当观察者推送错误时,如HTTP错误,我的observable被关闭,所以我的组件不再被通知. 题 即使出现错误,如何让我的组件继续收听我的服
我在Angular 2中遇到了Observable的问题.
我将我的组件订阅到一个observable,然后当我的服务有新值时,我的组件会被通知. 题 例 这是我的代码: 零件 constructor(private appService: AppService) { //I subscribe my component to an observable this.appService.commentsObservable.subscribe((comments) => { console.log(comments); },(err) => { console.log(err); }); } getComments() { //I ask the service to pull some comments this.appService.getComments() } 服务 private commentsObserver: Observer<any>; commentsObservable: Observable<any>; constructor() { this.commentsObservable = new Observable((observer) => { this.commentsObserver = observer; }); } getComments() { setTimeout(() => { //You will see the result displayed by the component this.commentsObserver.next([]); },0); setTimeout(() => { //You will see the result displayed by the component this.commentsObserver.next([]); },500); setTimeout(() => { //You will see the error displayed by the component this.commentsObserver.error({_body: 'Nice errroorr'}); },1000); setTimeout(() => { //You won't see this one,why ? this.commentsObserver.next([]); },1500); } 解决方法
这是预期的行为.
According to the documentation,
对于上面的代码,它可能是 this.appService // error is caught,but the observable is completed anyway .catch((err) => { console.error(err) return Observable.empty(); }) // re-subscribe to completed observable .repeat() .subscribe((comments) => console.log(comments)); 但考虑到预期的行为,使用RxJS错误处理来提供具有非严重错误值的连续可观察量是不切实际的.相反,它可能会改为 setTimeout(() => { //You will see the error displayed by the component this.commentsObserver.next(new Error('Nice errroorr')); },1000); 和 this.appService.commentsObservable.subscribe((comments) => { if (comments instanceof Error) console.error(comments); else console.log(comments); }); 该方法可能根据实际情况而有所不同. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |