angular – 路由解析时RxJS forkJoin句柄错误
发布时间:2020-12-17 17:54:44 所属栏目:安全 来源:网络整理
导读:在尝试进行路由解析时,我似乎无法找到一种方法来捕获/处理forkJoin中的错误. 我为Account页面创建了一个路由解析器,它应该在路由之前返回2个请求.现在这是我无法解决的部分:如果用户没有订阅,则从服务器返回404.我想处理这个问题,如果发生这种情况,用户应该
在尝试进行路由解析时,我似乎无法找到一种方法来捕获/处理forkJoin中的错误.
我为Account页面创建了一个路由解析器,它应该在路由之前返回2个请求.现在这是我无法解决的部分:如果用户没有订阅,则从服务器返回404.我想处理这个问题,如果发生这种情况,用户应该被路由到另一个页面,从那里他可以订阅. import { Injectable } from '@angular/core'; import { Resolve,ActivatedRouteSnapshot } from '@angular/router'; import { Observable } from 'rxjs/Rx'; import { AccountService } from './account.service'; @Injectable() export class AccountResolver implements Resolve<any> { constructor(private accountService: AccountService) { } resolve(route: ActivatedRouteSnapshot): Observable<any> { return Observable.forkJoin([ this.accountService.getUser(),this.accountService.getUserSubscriptions() ]); }; } 当请求getUserSubscriptions()时,如何捕获并处理服务器发送的错误404? 解决方法
您可以捕获错误,并重定向到所需的路由,如下所示:
@Injectable() export class AccountResolver implements Resolve<any> { constructor(private accountService: AccountService,private router: Router) { } resolve(route: ActivatedRouteSnapshot): Observable<any> { return Observable.forkJoin([ this.accountService.getUser(),this.accountService.getUserSubscriptions() .catch(error => { if(error.status === 404) { this.router.navigate(['subscription-create']); } return Observable.throw(error); }) ]); }; } 这样,错误就会被处理,但也会以原始形状返回到resolve方法,因此解析器可以拒绝访问以前的目标路由(forkJoin中的任何失败请求都会导致forkJoin本身失败). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |