angular - Angular auth 保护嵌套异步调用
问题描述
我在尝试调用两个异步 http 请求时遇到了一个问题,我试图调用两个异步 http 请求,然后在成功完成后我想做第三个以获取最后一个信息,然后再让用户访问该页面。
到目前为止,这是我的代码:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean {
if (this.recruteurService.getUserInfo() &&
this.recruteurService.getIndividuPro() &&
this.recruteurService.getEtablissement()) {
return true;
}
return forkJoin(
this.recruteurService.rechercherUserInfo(),
this.recruteurService.rechercherIndividuProfessionnel())
.mergeMap(([userInfo, individuPro]) => {
if (userInfo && individuPro) {
this.recruteurService.setUserInfo(userInfo);
this.recruteurService.setIndividuPro(individuPro);
} else {
return false;
}
return this.recruteurService.rechercherEtablissementParIdRce(individuPro.etablissements[0]).map(
(etablissement: Etablissement) => {
if (etablissement) {
this.recruteurService.setEtablissement(etablissement);
return of(true);
}
return of(false);
});
});
}
问题是我遇到了一个错误:
src/app/guard/initialization.guard.ts(32,17) 中的错误:错误 TS2345:类型参数 '([userInfo, individuPro]: [any, Individu]) => false | Observable>' 不可分配给类型为 '(value: [any, Individu], index: number) => ObservableInput>' 的参数。输入'假| Observable>' 不可分配给类型 'ObservableInput>'。类型“false”不可分配给类型“ObservableInput>”。
但我不知道有什么问题。
解决方案
您已定义canActivate() => boolean
,但如果我正确理解您的代码,forkJoin()
您将返回。Observable<boolean>
该canActivate
方法可以返回boolean
或Observable<boolean>
因此boolean | Observable<boolean>
返回类型,请参阅https://angular.io/api/router/CanActivate。
您可能只想制作canActivate(...): boolean | Observable<boolean>
或仅使用canActivate(...): Observable<boolean>
然后返回return of(true);
。
推荐阅读
- python - matplotlib - 消除时间序列数据图中的时间间隔?
- angular - 角度图表js条形图宽度不起作用
- google-sheets - 谷歌表格:获取加密价格和历史的 API?
- node.js - 如何在 Puppeteer 中访问 Chrome 下载元素?
- ansible - 根据远程主机条件ansible playbook在本地编辑excel文件
- xcode - Xcode 12.5.1(或 git)不断从我们的仓库中删除 Package.resolved
- android - 根据微调器选择(firestore)填写字段
- python - 尝试在 heroku 上部署应用程序,错误:nltk.downloader(运行时警告)
- python - 每当模式匹配时,在文档中查找模式并打印进行 3 行
- blockchain - 以太坊区块链智能合约如何存储