NGRX порядок выполнения отправки и выбора - PullRequest
0 голосов
/ 29 сентября 2019

У меня есть кнопка публикации, которая вызывает метод addPost () для отправки действия (Добавить запись на сервер), а затем выбирает добавленный идентификатор записи.У меня есть редуктор Add_Success, чтобы назначить добавленный идентификатор сообщения в selectedPostId, который будет использоваться селектором getCurrentPostHeaderId.

Правильный порядок выполнения, который я ожидаю, следующий: 1. Отправьте действие AddPost 2. Выберите добавленный идентификатор записи

Но после первого выполнения порядок всегда был неправильным: 1. Выберитепредыдущий пост Id 2. Отправка действия AddPost 3. Выберите добавленный пост Id

. При первом запуске выполнение выполняется правильно, действие отправлено, и в журнале отображается правильный добавленный идентификатор.enter image description here

Но если я сразу добавлю еще одно сообщение после первого запуска, кажется, что старый селектор будет выполнен первым и будет отображаться предыдущий идентификатор.После этого будет успешно добавлено только новое сообщение и выбран новый идентификатор сообщения.enter image description here

Мой компонент:

addPost() {
const postStatus = Object.assign({}, this.newPostForm.value);
let postHeader: any = {};

postHeader.postStatus = postStatus;

this.store.dispatch(new postHeaderActions.AddToPost(postHeader)); //Add post

this.store.select(
  fromPost.getCurrentPostHeaderId
)
.subscribe((post) => {
  if (post) {
      console.log(post); //Return the new added post id
  }
});
}

Мой редуктор и селектор:

case ActionTypes.Add_Success: {
        console.log('hey');
        return postHeaderAdapter.addOne(action.payload, {
            ...state,
            selectedPostId: action.payload.id,
            loaded: true
        });
    }

export const getCurrentPostHeaderId = createSelector(
    getPostHeaderFeatureState,
    (state: PostHeaderState) => state.selectedPostId
);

То же самое происходит для нескольких прогонов, выМожно видеть, что со второго запуска, он вернет предыдущий Id, прежде чем показывать новый Id.enter image description here

Может кто-нибудь помочь мне в этом?Спасибо

1 Ответ

0 голосов
/ 29 сентября 2019

Один из способов прослушивания только следующего идентификатора - прослушивание только после изменения идентификатора:

this.store.select(
  fromPost.getCurrentPostHeaderId
)
   .pipe(distinctUntilChanged())
   .subscribe(...)
...