Получить элемент хранилища в действии

#angular #rxjs #ngrx

#angular #rxjs #ngrx

Вопрос:

У меня небольшой эффект, и мне нужно получить данные действия (nanoId), и мне нужно выбрать данные с этим nanoId в хранилище:

   @Effect()
  syncObj$ = this.actions$.pipe(
    ofType(ObjActions.Actions.SYNC_NEW_OBJ),
    mergeMap(({nanoId, obj}) => {
      this.store.pipe(select(getObjByNanoId(nanoId), first())).subscribe(eObj => {
        // return [] <-- error if I try to return pipe result here and remove return below
      })
      return [] // <-- this is below return
    }
    )
  );
  

Я подумал withLatestFrom() , но, как я понимаю, для этого нужен дополнительный канал.
Моя цель — перехватить объект и наноид из действия, затем выбрать объект с nanoId в хранилище (eOnj) и сравнить некоторые из его полей. Спасибо!

Ответ №1:

Обратите внимание, вам не нужно подписываться внутри withLatestFrom , поскольку для этого требуется наблюдаемый.

  @Effect()
  syncObj$ = this.actions$.pipe(
    ofType(ObjActions.Actions.SYNC_NEW_OBJ),
    mergeMap(action => {
     
      return of(action).pipe(
        withLatestFrom(
          this.store.pipe(select(getObjByNanoId(nanoId)),
        )
      )
    }),
    mergeMap(([action, obj]) => {
      // code here
    })

  );
  

Комментарии:

1. @Dmitry Добро пожаловать, рад помочь