Angular Auth Guard嵌套异步调用

时间:2018-08-06 09:54:04

标签: angular rxjs observable fork-join

我有一个问题困扰着我的身份验证卫士,我试图在其中调用两个异步http请求,然后在成功完成后,我想做第三个请求以获得最后一个信息,然后再让用户访问该页面。 / p>

到目前为止,这是我的代码:

Elements xyz

问题是我遇到了错误:

  

src / app / guard / initialization.guard.ts(32,17)中的错误:错误TS2345:   类型'([[userInfo,individuPro]:[any,Individu])=> false的参数   | Observable>'不能分配给的参数   输入'(值:[any,Individu],索引:数字)=>   ObservableInput>”。输入'false |   Observable>'不可分配给类型   “ ObservableInput>”。       不能将类型“ false”分配给类型“ ObservableInput>”。

但是我不知道出了什么问题。

2 个答案:

答案 0 :(得分:0)

您定义了canActivate() => boolean,但是如果我正确理解您的代码,您将返回forkJoin(),即Observable<boolean>

canActivate方法可以返回booleanObservable<boolean>,因此boolean | Observable<boolean>返回类型,请参见https://angular.io/api/router/CanActivate

您可能想制作canActivate(...): boolean | Observable<boolean>或只使用canActivate(...): Observable<boolean>,然后返回return of(true);

答案 1 :(得分:0)

好吧,我设法在第二个可观察的流上使用运算符flatMap找到了一个解决方案:

return this.recruteurService.rechercherEtablissementParIdRce(individuPro.etablissements[0]).flatMap(

  

flatMap-它基本上合并了可观察序列   序列变成一个可观察的序列。

感谢此文档:Map vs FlatMap