NGRX объемный эффект уже определенного одиночного эффекта - PullRequest
0 голосов
/ 22 января 2019

Итак, я работаю над приложением с концепцией «Планы», и к каждому плану можно добавить комментарий.Эта часть работает нормально, но, похоже, она не работает и запутывается, если я пытаюсь запустить это в цикле.

Действие:

export class AddComment implements Action {
  readonly type = CommentActionTypes.AddComment;

  constructor(public payload: Comment) {}
}

export class AddCommentSuccess implements Action {
  readonly type = CommentActionTypes.AddCommentSuccess;

  constructor(public payload: Comment) {}
}

Эффект

  @Effect()
  addComment$: Observable<Action> = this.actions$
  .ofType<AddComment>(CommentActionTypes.AddComment).pipe(
    switchMap(action => this.commentService.addComment(this.disciplineType, action.payload)),
    map((comment: any) => new AddCommentSuccess(comment)),
    catchError(err => of(new AddCommentFail(err)))
  );

Реализация

То, с чем я борюсь, это быстрое срабатывание / у меня есть ситуация, когда я хочу добавить дублирующий комментарий к нескольким планам.

saveSet.forEach(x => {
          comment.plan_id = x.id;
          this.store.dispatch(this.buildAddCommentAction(comment));
        });

Для справки:

buildAddCommentAction(comment: DisciplineComment) : Action {
  return new CommentActions.AddComment(comment);
}

Что происходит

Если у меня есть список из 5 планов и я хочу добавить дублирующий комментарий ко всем из них, я получаю только успешный ответ на последний элемент впетля.

Теперь я знаю, что это слишком болтливо, то есть 5 отдельных вызовов клиент / сервис.Что я не могу понять, какой должен быть предписанный подход к этому?

1.) Новое действие BulkAddComment, эффект и т. Д. Я не хочу этого делать, потому что у меня есть Комментарии, Проблемы (аналогичные по функциям инужно) и по одному на каждую «дисциплину».Это будет около 36 новых эффектов и вдвое больше в действиях.Необходим серьезный рефакторинг.

2.) Изменить действия и эффекты для 1 или нескольких

3.)?

Спасибо за ввод

1 Ответ

0 голосов
/ 22 января 2019

Это потому, что вы используете оператор switchMap, который отменит текущую наблюдаемую работу, в вашем случае вызов службы.

Вам придется использовать concatMap или mergeMap.Если заказ важен, используйте concatMap, если не используете mergeMap, потому что это сделает ваши сервисные вызовы параллельно.

Для получения дополнительной информации смотрите this .

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