Доступ к последнему состоянию из наблюдаемого редуксом эпоса после ответа API - PullRequest
0 голосов
/ 25 июня 2019

Я прочитал это Доступ к состоянию из наблюдаемой в эпоксиде эпопеи , но это не помогает мне найти ответ.

Я использую наблюдаемую избыточность в моем приложении реагировать на избыточность, у меня есть эпопея, которая вызовет вызов API, код как показано ниже:

const streamEpicGet = (action$: Observable<Action>, state$) => action$
  .pipe(
    ofType(streamActions.STREAM_ITEM_GET),
    withLatestFrom(state$),
    mergeMap(([action, state]) => {
      return observableRequest(
      {
        failureObservable: error => {
          const actions = []
          return actions
        },
        settings: {
          body: queryParams, // I can access to the state data here to organize the query params I need for calling the API
          url: '/path/to/api',
        },
        successObservable: result => {
          const { pushQueue } = state
          // here I want to access to the latest state data after API response
        }
      })
    }),
  )

В приведенном выше коде я использую withLatestFrom(state$), поэтому я могу получить доступ к самым последним данным при выполнении кода оператора mergeMap, то есть я могу получить доступ к данным состояния здесь, чтобы организовать параметры запроса для API.

Однако в течение времени после отправки запроса API и до того, как он отвечает, происходят другие действия, которые меняют состояние pushQueue, поэтому после ответа API я хочу прочитать последнее состояние pushQueue в мой successObservable обратный вызов.

Моя проблема в том, что я всегда получаю те же данные о состоянии, что и при подготовке параметра запроса, т. Е. Я не могу получить последние данные о состоянии после ответа API в successObservable обратном вызове.

Дайте мне знать, если вам нужна дополнительная информация, спасибо.

1 Ответ

0 голосов
/ 25 июня 2019
const streamEpicGet = (action$: Observable<Action>, state$) => action$
  .pipe(
    ofType(streamActions.STREAM_ITEM_GET),
    withLatestFrom(state$),
    mergeMap(([action, state]) => {
      return observableRequest(
      {
        failureObservable: error => {
          const actions = []
          return actions
        },
        settings: {
          body: queryParams, // I can access to the state data here to organize the query params I need for calling the API
          url: '/path/to/api',
        },
        successObservable: result => {
          const { pushQueue } = state$.value // Use state$.value to always access to the latest state
          // here I want to access to the latest state data after API response
        }
      })
    }),
  )

Таким образом, ответом будет использование state$.value.

. Я получаю это, читая Состояние доступа в наблюдаемом редуксе Документ о миграции

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...