如何在映射时将 angular observable 编码为 return 平面值
How do to code an angular observable to return flat values when mapped
我正在编写代码,如果某个值设置为 true,则不允许客户访问页面我现在有可用的代码,但我的直觉告诉我这不是最有效的使用方式。
密码是:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Observable<boolean> | Promise<boolean> {
let bar= false;
this.foo$.subscribe((x) => {
bar = x;
});
return !bar;
}
但我希望它看起来像这样:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Observable<boolean> | Promise<boolean> {
return this.foo$.subscribe((x) => {
return x;
});
}
问题是如果我这样使用它,它会一直返回一个 Observable,而守卫的 canActivate 函数在这个 Observable 上不起作用。
如果 this.foo$
是一个 Observable<boolean>
那么你可以简单地否定 map()
函数中的布尔值 (see documentation) 和 return 结果 Observable
像这样:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Observable<boolean> | Promise<boolean> {
return this.foo$.map(x => !x);
}
由于异步 foo$
订阅,您的第一个代码片段将无法可靠地工作。在调用 foo$.subscribe()
方法之前,函数可能总是 return true
我正在编写代码,如果某个值设置为 true,则不允许客户访问页面我现在有可用的代码,但我的直觉告诉我这不是最有效的使用方式。
密码是:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Observable<boolean> | Promise<boolean> {
let bar= false;
this.foo$.subscribe((x) => {
bar = x;
});
return !bar;
}
但我希望它看起来像这样:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Observable<boolean> | Promise<boolean> {
return this.foo$.subscribe((x) => {
return x;
});
}
问题是如果我这样使用它,它会一直返回一个 Observable,而守卫的 canActivate 函数在这个 Observable 上不起作用。
如果 this.foo$
是一个 Observable<boolean>
那么你可以简单地否定 map()
函数中的布尔值 (see documentation) 和 return 结果 Observable
像这样:
canActivate(route: ActivatedRouteSnapshot, state: RouterStateSnapshot): boolean | Observable<boolean> | Promise<boolean> {
return this.foo$.map(x => !x);
}
由于异步 foo$
订阅,您的第一个代码片段将无法可靠地工作。在调用 foo$.subscribe()
方法之前,函数可能总是 return true