Angular 角度6+防护-向CombineTest订阅返回真/假

Angular 角度6+防护-向CombineTest订阅返回真/假,angular,rxjs,rxjs6,angular-guards,Angular,Rxjs,Rxjs6,Angular Guards,如何在订阅内返回真/假 你只是不同意你的观察 您应该始终为下一个链式操作符返回一个可观测值,在这种情况下,该操作符是守护的 删除订阅数据=>{…}部分 如果您必须应用自定义逻辑,请在map运算符中执行此操作,并返回您想要返回的任何内容,即true或false您是对的。。。但现在我不明白为什么数据[0]没有价值。。。它是空的。。。它不等待ngrx填充值。。。。当我使用subscribe时,我使用了正确的值…在mapI发现我的问题是我在异步保护内使用调度事件后,尝试在管道中使用take1或第一个运算

如何在订阅内返回真/假


你只是不同意你的观察

您应该始终为下一个链式操作符返回一个可观测值,在这种情况下,该操作符是守护的

删除订阅数据=>{…}部分


如果您必须应用自定义逻辑,请在map运算符中执行此操作,并返回您想要返回的任何内容,即true或false

您是对的。。。但现在我不明白为什么数据[0]没有价值。。。它是空的。。。它不等待ngrx填充值。。。。当我使用subscribe时,我使用了正确的值…在mapI发现我的问题是我在异步保护内使用调度事件后,尝试在管道中使用take1或第一个运算符。。。因此,在继续之前,保护不会等待异步效果完成。有什么建议吗?
import {Injectable} from '@angular/core';
import {Router, CanActivate, ActivatedRouteSnapshot, RouterStateSnapshot} from '@angular/router';
import {AppState} from '../../app.state';
import {select, Store} from '@ngrx/store';
import {merge, combineLatest} from 'rxjs';
import {map, take, tap} from 'rxjs/operators';
import {HttpClient} from '@angular/common/http';


@Injectable()
export class PermissionsGuard implements CanActivate {

user;

constructor(
  private router: Router,
  private store: Store<AppState>
) {
}

canActivate(route: ActivatedRouteSnapshot): any {

  const academy$ = this.store.pipe(select(state => state.academy));
  const user$ = this.store.pipe(select(state => state.user));

  return combineLatest(
     academy$,
     user$
  ).pipe(
     map((data) => {
        console.log(data[0]);
        console.log(data[1]);
        return data;
     })
  ).subscribe((data) => {
     console.log(data);
     // return true or false to guard
  })
}

}