因此,我正在开发一个具有“计划”概念的应用程序,每个计划都可以添加评论。该部分工作正常,但如果我尝试循环运行,它似乎会失败并感到困惑。
操作:
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。)?
感谢您的输入
答案 0 :(得分:1)
这是因为您正在使用switchMap
运算符,该运算符将取消当前正在运行的可观察到的值,在您的情况下为服务调用。
您将必须使用concatMap
或mergeMap
。如果顺序很重要,请使用concatMap
,如果不重要,请使用mergeMap
,因为这将使您的服务调用并行进行。
有关更多信息,请观看this。