У меня есть гвардия, защищающая определенный маршрут. В методе canActive
мне нужно сделать два HTTP-запроса, при которых второй запускается на основе ответа первого. Однако второй запрос никогда не выполняется, и я предполагаю, что он относится к вложенной конструкции возвращаемых Observables.Angular2: Вложенные наблюдаемые в гвардии
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() никогда не отправляется. Отладчик выходит молча в строке 5.
Еще одна вещи, машинопись показывает предупреждение, что, вероятно, говорит мне решение уже, однако, я слишком много нуба с наблюдаемыми характеристиками, в частности, знать, что с ним делать:
Observable<Observable<boolean>>' is not assignable
to type 'Observable<boolean>'
Чтобы угадать, конструкция Observables никогда не решает, поэтому нет предупреждения, и я жду до конца времени. Мое наивное понятие состояло в том, что до тех пор, пока любой Observable вернет логическое значение (как это сделано в строке 7), абонент будет знать, как его обрабатывать.
Я рад прочитать ваши намеки. Off спать ...
Всё. Полагаю, я сажусь и ухожу за полным учебником Observables. – Matt
Пойдите для этого. Невероятно, что вы можете с ними сделать. Проверьте «rx marbles»! – j2L4e