Эффекты 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
      ...
    )
Другие вопросы по тегам