对Observable的行为感到困惑

时间:2017-03-20 15:15:01

标签: angular angular2-observables

我有一个带有返回Observable

的方法的服务
SecurityService {
    canAccess():Observable<boolean> {...}

我在不同的地方使用它,在canActivate防护和w / in组件中。

这是我的canActivate方法:

canActivate(route:ActivatedRouteSnapshot, state: RouterStateSnapshot) {
    return this.securityService.canAccess(route.data['securityScreenId'],'screen','NA').first().map(result => {
        console.log(result);
        return result;
    });
}

当我查看浏览器控制台时,我看到了这个输出:

ScalarObservable {_isScalar: true, value: true, scheduler: null}

当我将此警卫应用于路线时,路线将被取消,路线的组件不会加载。

我认为map应该采用被映射的observable的响应,然后根据传递给map的方法对其进行转换。所以在我的方法中,不应该将console.log的结果改为true,而不是ScalarObservable吗?

1 个答案:

答案 0 :(得分:0)

canActivate(route:ActivatedRouteSnapshot, state: RouterStateSnapshot) {
return this.securityService.canAccess(route.data['securityScreenId'],'screen','NA').first().subscribe(result => {
    console.log(result);
    return result;
});

}

AFAIK Observables在您订阅之前不会执行。