Эффекты Ngrx: не удается получить объекты из магазина или службы - PullRequest
0 голосов
/ 05 июня 2019

Я разрабатываю приложение под углом 8, используя ngrx (store, эффекты, объекты, storedevtools).Я также открываю ngrx.Я следовал инструкциям из официального документа, и все было в порядке, пока я не решил оптимизировать http-запросы моего приложения.

Я хочу проверить эффект в магазине, если сущности уже загружены, а если нет, связаться с моим сервисом.

Я гуглил и нашел этот пример, вдохновленный им, но у меня естьПроблема https://medium.com/@haldun7/caching-http-requests-while-using-ngrx-effects-98abd50c5c78

Моя проблема из браузера консоли:

ОШИБКА TypeError: «Вы указали« неопределенный », где ожидался поток. Вы можете предоставить Observable, Promise,Array или Iterable. "

Эффект, возникающий при возникновении проблемы:

  @Effect() 
  loadAllCountries$ = this.actions$.pipe(
    ofType(fromActions.CountryActionTypes.LOAD_ALL_COUNTRIES),
    withLatestFrom(this.store.pipe(select(fromReducers.selectAllCountries))),
    switchMap((list) => { // <= this guy is a [never, Country[]] object and I don't know why :(
      if (list[1].length !== 0) {

        var temp = list[1];

        return [new fromActions.LoadCountriesSuccess( {countries: temp })];
      }
      this.service.getCountries().pipe(
        map(data => new fromActions.LoadCountriesSuccess({ countries: data })))
    })
  );

Это довольно странно, поскольку при пошаговой отладке list [1] равен 0так что остальная часть должна быть выполнена без проблем.

Это неоптимизированная версия Эффекта, которая отлично работает

  @Effect() 
  loadAllCountries$: Observable<Action> = this.actions$.pipe(
    ofType(fromActions.CountryActionTypes.LOAD_ALL_COUNTRIES),
    switchMap(() => 
         this.service.getCountries().pipe(
         map(data => new fromActions.LoadCountriesSuccess({ countries: data })) 
      )));

В основном у меня есть 2 вопроса:

  1. Кто-нибудь знает, в чем мой код ошибки?
  2. Знаете ли вы, почему withLatestFrom возвращает [никогда, Страна []], я думаю, что наблюдаемое должно быть более полезным.

Я могу предоставить другую часть кода (редукторы, действия...) если нужно, но это очень близко к этому примеру, я также учил ngrx: https://www.concretepage.com/angular-2/ngrx/ngrx-entity-example

Большое спасибо за вашу помощь:)

1 Ответ

0 голосов
/ 05 июня 2019

Вы пропустили возврат сюда

return this.service.getCountries().pipe(
        map(data => new fromActions.LoadCountriesSuccess({ countries: data }))). 

Поэтому ваша карта-переключатель ничего не возвращает.В этом случае

switchMap(() => 
         this.service.getCountries().pipe(
         map(data => new fromActions.LoadCountriesSuccess({ countries: data })) 
      )))

Ваш код автоматически возвращает результат this.service.getCountries().., так как это функция, состоящая из одной строки.

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