Почему ngrx возвращает 2 объекта, даже если я добавлю takeUntil и skipWhile? - PullRequest
1 голос
/ 13 июня 2019

В моей ситуации у меня должен быть только список массивов с моими публикациями. Но я получил 2 списка, первый пустой, а второй - мой настоящий список.

Я не использую async в своем html, это просто ngfor, которое я беру из моей подписки.

В моем ngOnInit:

this.publication$ = this.store$.pipe(
    skipWhile(val => val == null),
    select(PublicationFeatureStoreSelectors.selectAllPublicationFeatureItems),
    filter(value => value !== undefined),
);

this.publication$.subscribe(data => {
    takeUntil(this.ngDestroyed$),
        this.piins = data;
    this.publicationAppeared = data.map(a => a._id);
    this.checkIfLiked();
    console.log(data);
});

В моем ngOnDestroy:

this.ngDestroyed$.next();
this.ngDestroyed$.complete();

Мой селектор

export const selectAllPublicationsFeatureItems: (
  state: object
) => Publications[] = featureAdapter.getSelectors(selectPublicationsFeatureState).selectAll;

export const selectPublicationsFeatureState: MemoizedSelector<
  object,
  State
> = createFeatureSelector<State>('publicationFeature');

Это мой результат:

[]
(3) [{…}, {…}, {…}]

Это у меня в редукторе:

    case ActionTypes.GET_PUBLICATION_SUCCESS: {

       const myobject = featureAdapter.addAll(action.payload, {
        ...state,
        isLoading: false,
        error: null
      });

      console.log(myobject); // the result is just below

      return myobject;
    }

Результат console.log:

{ids: Array(3), entities: {…}, isLoading: false, error: null}
entities: {5d0261c743d8c30793eb8d25: {…}, 5d01713c7f353a1a81349299: {…}, 5d0170a67f353a1a81349295: {…}}
error: null
ids: (3) ["5d0261c743d8c30793eb8d25", "5d01713c7f353a1a81349299", "5d0170a67f353a1a81349295"]
isLoading: false
__proto__: Object

Результат точно такой же, как у меня на reduxTool

Если у вас есть решение не использовать и не вызывать первый список массивов, большое спасибо.

Мне почти нужно использовать мой метод checkIfLiked () только один раз

1 Ответ

1 голос
/ 18 июня 2019

Это выглядит так знакомо !

Я бы посоветовал вам tap(console.log) отладить ваш поток, чтобы вы видели, что там происходит, что-то вроде:

this.publication$ = this.store$.pipe(
  tap(val => console.log('skipWhile', val, val == null)),
  skipWhile(val => val == null),
  select(PublicationFeatureStoreSelectors.selectAllPublicationFeatureItems),
  tap(value => console.log('filter', value, value !== undefined)),
  filter(value => value !== undefined),
);

И вывод будет ясен о том, какое условие проходит и что идет не так.
Удачи!

...