Эффекты Agular Store не ждут данных селекторов
Я работаю над проектом Angular, используя магазин NgRx . Все ответы серверной части сохраняются в магазине.
Это мои эффекты.ts
loadData$ = createEffect(() => this.actions$.pipe(
ofType('[Data] Load Data'),
concatMap((action: any) => of(action).pipe(
withLatestFrom(this.store$.pipe(select(selectorData)))
)),
switchMap(([, request]: any) => this.Service.getDataApi(
request.data1.iid,
request.data2.iid2
)
.pipe(
map((data: Data[]) => ({
type: '[Data] Load Success',
payload: { data },
}
)),
catchError((error: any) => of({
type: '[Datae]] Load Failure',
payload: { error },
}
))
))
)
);
Как я могу дождаться данных selectorData ? Есть ли какой-то конкретный метод для этого? Idd и iid2 текущей реализации пусты.
Заранее спасибо.
Изменить 1 Я внес изменения ниже
concatMap((action: any) => of(action).pipe(
withLatestFrom(this.store$.pipe(select(selectorData),skipWhile(iid => !iid),
skipWhile(iid2 => !iid2),
mapTo(true))
)
Вышеупомянутые изменения не будут вызываться с помощью API. Как я могу позвонить, если данные доступны
Редактировать 2
filter(([, {configData}]: any) => configData.iid &&
configData.iid)
Фильтр тоже пробовал. Первый раз configData.iid не определен. Как мы можем решить эту проблему ?
Выдает неопределенную ошибку
Редактировать 3. Я пробовал combLatestWith. Он не ждет
this.store$.pipe(select(selectorData))
Любое другое решение для ожидающих данных?
1 ответ
Вы можете использовать
combineLatest
ждать нескольких действий или исходных наблюдаемых.
loadData $ = createEffect(() => {
return combineLatest(
this.actions$.pipe(
ofType('[Data] Load Data')
),
this.store$.pipe(
select(selectorData),
filter(iid => !!iid) // Filters untruthy values
)
).pipe(
// Wont come here until both observables have emitted
...
)