Я использую средство защиты маршрута для извлечения данных из хранилища NgRX и запускаю (если требуется) запрос API для загрузки их из хранилища до разрешения маршрута.По сути, мы ждем, когда сущность будет определена в хранилище, а логический флаг отметит ее как завершенную загрузку, тогда наблюдаемое излучает true
, и маршрут должен разрешиться.
Однако, несмотря на наблюдаемое в canActivate()
успешно излучает, маршрут не загружается, и я не вижу причин для этого.До этой точки поток ведет себя как ожидалось: сначала loaded
ложно, а сущность undefined
.Затем, после завершения вызова API, сущность становится определенной, и, наконец, логическое значение loaded
становится true
.Затем фильтр пропускает нас, и файл console.log «load pls» отображается один раз.На данный момент, конечно, маршрут должен теперь загрузить?
canActivate(): Observable<boolean> {
return this.getEntity().pipe(
switchMap(() => {
console.log('load pls');
return of(true);
}),
catchError(() => of(false)),
);
}
getEntity(): Observable<boolean> {
return combineLatest([this._store.select(getActiveEntity), this._store.select(getActiveEntityLoaded)]).pipe(
map(latest => {
const [entity, loaded] = latest;
if (!entity) {
this._store.dispatch(new GetItemRequest());
}
return loaded;
}),
filter(loaded => loaded),
take(1),
);
}
(я понимаю, что логическое значение loaded
здесь довольно избыточно, но я не могу заставить это работать независимо от этого)