her*_*iim 4 fork-join observable rxjs angular
在尝试进行路由解析时,我似乎无法找到一种方法来捕获/处理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()
]);
};
}
Run Code Online (Sandbox Code Playgroud)
当请求getUserSubscriptions()时,如何捕获并处理服务器发送的错误404?
这取决于错误发生的位置,这在您的示例中并非完全明显.
如果getUserSubscriptions()
调用发出错误,那么您需要在传递之前捕获它,forkJoin
因为其他视图forkJoin
将重新发送错误.另请注意,forkJoin
要求每个源Observable至少发出一个值.这就是为什么我不能使用Observable.empty()
,我需要使用例如Observable.of(null)
.
return Observable.forkJoin([
this.accountService.getUser(),
this.accountService.getUserSubscriptions()
.catch(err => {
// Logic based on the err parameter
return Observable.of(null);
})
]);
Run Code Online (Sandbox Code Playgroud)
这只会替换错误,null
因此您可以在订阅者中处理它forkJoin
.
归档时间: |
|
查看次数: |
4663 次 |
最近记录: |