Странное поведение при использовании эффекта ngrx с оператором withLatestFrom - PullRequest
1 голос
/ 27 февраля 2020

У меня есть селектор ниже

export const selectUserData = createSelector(selectState, state => {
    return state.user;
});

И, по моему мнению, если я использую withLatestFrom без []

withLatestFrom(
     this.commonStore.pipe(select(selectUserData))
)

loadUser$ = createEffect(() =>
        this.actions$.pipe(
            ofType(UserActionsTypes.GetUserSuccess),
            withLatestFrom(
                this.commonStore.pipe(select(selectUserData))
            ),
            mergeMap(([_, user]) => { 
                  console.log(user);

}

console.log вернет нулевые данные

Но если я добавлю [] к withLatestFrom

withLatestFrom(
     [this.commonStore.pipe(select(selectUserData))]
)

Тогда я получу данные, используя подписку в mergeMap

console.log(user.subscribe(x => console.log(x)));

Обратите внимание, что в селекторе есть данные, и я проверьте в redux devtool данные существуют.

Есть идеи, как это произошло?

1 Ответ

0 голосов
/ 08 марта 2020

Я обнаружил, что проблема должна быть в состоянии гонки на другом эффекте, который я слушал при использовании оператора withLatestFrom, поэтому я изменил тип на GetInitDataSuccess (действие CommonActionsType.GetInitDataSuccess было запущено до GetUserSuccess)

ofType(CommonActionsType.GetInitDataSuccess)
withLatestFrom(
            this.commonStore.pipe(select(selectUserData))
        ),
        mergeMap(([_, user]) => { 
              console.log(user);
...