Вызовы API, зависящие от последовательности эффектов NGRX

В настоящее время я работаю над функцией для приложения Angular с использованием NGRX, в котором действие отправляется для получения некоторых данных с использованием идентификатора; затем, используя объект ответа из первого вызова службы, делается второй запрос, чтобы получить дополнительные сведения из другой конечной точки. После того, как все сделано, данные/действия могут продолжать поступать.

Проблема: я ищу способ выполнить действия, описанные выше, в одном эффекте, без объединения эффектов/действий в цепочку, так как это может привести к тому, что отображаемый компонент будет неполным.

Я видел несколько примеров использования forkJoin, но не уверен, что это применимо, поскольку это не параллельные вызовы, а упорядоченные.

Код примерно такой:

    this.actions$.pipe(
      ofType(fetchAllData),
      switchMap(action => {
        const one = this.api.getById(serviceUrl, action.Id);
        return one.pipe(
          switchMap((data) => {
            cons two = this.api.getMoreDetail(serviceUrl, two.id)
            return fetchDataActions(data, []);
          })
        );
      })
    )
  );  

Так что в идеале данные должны содержать все, что мне нужно, и готовы для заполнения моего компонента.

Примечания: - приведенный выше код не работает - вызовы должны выполняться по порядку, так как ответ от вызова № 1 будет использоваться в качестве параметра для вызова № 2 - выполнение упорядоченных диспетчерских действий не работает, поскольку данные компонента неполны при отображении.


person TheZerg    schedule 26.05.2020    source источник


Ответы (1)


После switchMap вы можете добавить второй оператор сопоставления, чтобы сделать второй запрос.

Я ищу способ выполнить действия, описанные выше, в одном эффекте, без цепочки эффектов/действий, поскольку это может привести к тому, что отображаемый компонент будет неполным.

Это неверно, если эффект не отправляет действие, которое обрабатывается редюсером и вызывает изменение состояния, компонент не будет перерисовываться. Он будет перерисовываться только в том случае, если состояние изменится.

См. следующую статью, в которой объясняются некоторые шаблоны эффектов: https://blog.nrwl.io/ngrx-patterns-and-techniques-f46126e2b1e5

person timdeschryver    schedule 27.05.2020