如何解决异步函数或方法的返回类型必须是全局Promise <T>类型Angular
我正在尝试创建一种保护措施,以验证是否允许用户根据业务逻辑导航到路由。
但是我得到的是异步函数或方法的返回类型必须是全局Promise类型。ts
async canActivate(
next: ActivatedRouteSnapshot,state: RouterStateSnapshot): Observable<boolean | UrlTree> | Promise<boolean | UrlTree> | boolean | UrlTree {
const idCliente = +next.paramMap.get('id');
const usuario = await this.authService.getUserSubject().pipe(first()).toPromise()
const cliente = await this.clienteService.obtenerCliente(idCliente).pipe(first()).toPromise()
return new Promise<boolean>((resolve,reject) => {
resolve(usuario.empresaId === cliente.empresaId)
})
}
解决方法
由于返回类型为Promise
,因此您可能需要修改返回类型:
async canActivate(next: ActivatedRouteSnapshot,state: RouterStateSnapshot): Promise<boolean> {
...
}
更可取的是使用Observable(而不是将getUserSubject
和obtenerCliente
的结果转换为Promises),如下所示:
canActivate(next: ActivatedRouteSnapshot,state: RouterStateSnapshot): Observable<boolean> {
const idCliente = +next.paramMap.get('id');
return combineLatest(
this.authService.getUserSubject(),this.clienteService.obtenerCliente(idCliente)
)
.pipe(
first(),map(([usuario,cliente]) => usuario.empresaId === cliente.empresaId)
)
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。