NGXS ofAction не запускается внутри службы углового распознавателя - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь реализовать распознаватель, который сначала отправляет действие для извлечения всех данных с сервера, а затем я пытаюсь захватить два потока responseOK и responseError, а затем из возврата преобразователя, который когда-либо из потоков генерирует значение первым. Эта настройка основана на следующем ответе на github https://github.com/ngrx/store/issues/270#issuecomment-317232654

, вот мой распознаватель:

@Injectable({
    providedIn: "root"
})
export class ScheduleAdministrationResolver
    implements Resolve<Observable<Schedule.FetchAllSportTypesSuccess | Schedule.FetchAllSportTypesFailed>> {
    constructor(private store: Store, private actions$: Actions, private router: Router) {}

    resolve(
        route: ActivatedRouteSnapshot,
        state: RouterStateSnapshot
    ):
        | Observable<Schedule.FetchAllSportTypesSuccess | Schedule.FetchAllSportTypesFailed>
        | Observable<Observable<Schedule.FetchAllSportTypesSuccess | Schedule.FetchAllSportTypesFailed>>
        | Promise<Observable<Schedule.FetchAllSportTypesSuccess | Schedule.FetchAllSportTypesFailed>> {
        this.store.dispatch(new Schedule.FetchAllSportTypes());

        const responseOK = this.actions$.pipe(ofAction(Schedule.FetchAllSportTypesSuccess));

        const responseError = this.actions$.pipe(
            ofAction(Schedule.FetchAllSportTypesFailed),
            tap(() => this.router.navigate([""]))
        );
        console.log("Inside SportType resolver");
        return race(responseOK, responseError).pipe(first());
    }
}

метод this.store.dispatch(new Schedule.FetchAllSportTypes()); в итоге вызывает fetchAllSportTypes(), который выглядит так:

fetchAllSportTypes(): Observable<SportType[]>{
 return of([{...}, {...}])
}

Все работает, как ожидалось, и срабатывает, как и ожидалось. Однако решатель никогда не завершается. Кажется, что потоки внутри метода race никогда не излучают никаких значений. Я точно знаю, что действие Schedule.FetchAllSportTypesSuccess отправляется, когда я регистрирую его на консоли, когда оно запускается.

Я не понимаю, почему ofAction не запускается, как ожидалось.

Дополнительная информация: это внутри функции администратора, которая загружается лениво. Я подключаю NGXS следующим образом:

app.module.ts;
imports: [
    ...NgxsModule.forFeature([SportTypeState]),
    NgxsModule.forRoot([], {
        developmentMode: true,
        selectorOptions: {
            suppressErrors: false,
            injectContainerState: false
        }
    })
];

1 Ответ

0 голосов
/ 03 ноября 2019

Я решил проблему. Проблема была в моем асинхронном методе, который извлекал все sportTypes.

fetchAllSportTypes(): Observable<SportType[]>
{
   return of([{...}, {...}])
}

вышеуказанный метод НЕ работал внутри распознавателя. Добавление .pipe(delay(1000)) закончилось работать как ожидалось.

fetchAllSportTypes(): Observable<SportType[]>
{
   return of([{...}, {...}]).pipe(delay(1000))
}
...