특정 경로를 보호하는 Guard가 있습니다. canActive
방법에서는 두 번째 HTTP 요청을 만들어야하는데, 두 번째 요청은 첫 번째 응답의 응답을 기반으로 트리거됩니다. 그러나 두 번째 요청은 결코 만들어지지 않으며 Observables를 반환하는 중첩 된 구성에 대한 것이라고 가정합니다.Angular2 : Guard의 중첩 관찰자
1 canActivate(route: ActivatedRouteSnapshot,
2 state: RouterStateSnapshot) : Observable<boolean>|boolean {
3 return this.provider.getA().map(
4 dataA => {
5 return this.provider.getB().map(
6 dataB => {
7 return (dataB.allowed);
8 }
9 );
}
);
}
모두 게타()와 getB() 반환 다음
getA() : Observable<any> {
return this.http.post(URL,payload).
map(response => response.json());
};
코드는 단순화되었지만 getA() 및 getB()가 제대로 작동한다고 가정 할 수 있습니다. getA()는 Guard가 호출 될 때 네트워크를 통해 정상적으로 전송되지만 getB()는 전송되지 않습니다. 디버거는 내가 그것으로 무엇을 알고 특히 Observables은 너무 많이 멍청한 놈이야, 타이프 라이터 그러나, 아마 이미 나에게 해결책을 알려주는 경고를 표시 줄에 자동으로 5
한 가지 더 종료 :
Observable<Observable<boolean>>' is not assignable
to type 'Observable<boolean>'
Observables의 구성이 결코 해결되지 않기 때문에 경고가 표시되지 않고 시간이 끝날 때까지 기다립니다. 내 순진한 생각은 Observable이 (7 행에서와 같이) 부울을 리턴하는 한, 가입자는이를 처리하는 방법을 알고 있어야한다는 것입니다.
힌트를 읽으면 기쁩니다. 침대 끄기 ...
그게 전부입니다. 나는 앉아서 Observables 전체 자습서를 보러 갈 것입니다. – Matt
가십시오. 당신이 그들과 함께 할 수있는 것은 놀라운 것입니다. 'rx marbles'를 확인하십시오! – j2L4e