我有效添加迭代数组的动作:
@Effect()
changeId$ = this.actions$.pipe(
ofType(ActionTypes.ChangeId),
withLatestFrom(this.store.select(fromReducers.getAliasesNames)),
switchMap(([action, aliasesNames]: [ChangeId, string[]]) => {
const actions: Action[] = [];
aliasesNames.forEach((alias) => {
actions.push(new AddField(alias));
});
return actions;
})
);
此外,我还有另一种听取AddField
动作的效果:
@Effect()
update$ = this.actions$.pipe(
ofType(ActionTypes.AddField),
withLatestFrom(this.store.select(fromReducers.GetSomeData)),
switchMap(([action, someData]: [AddField, string[]]) => {
// make something depend on adding field
})
);
问题是我希望每次AddField
操作后都会调用更新$效果。但是,而不是这个AddField
caleed三次,然后update$
效果也被称为三次。我觉得我的经营者错了。您能否提出我应该为此目的使用哪些操作员?
答案 0 :(得分:0)
您可以想象一个动作队列,并且可以将动作添加到该队列中。在一个“周期”中,将按以下方式处理动作。
此订单为guaranteed。假设您触发了changeId
操作。发生的事情是执行减速器并寻找该动作。然后执行效果。这种特殊的效果将几个addField
动作放入动作队列。这就是你的意思
但不是这个AddField减少了三倍...
下一步,addField
动作的化简执行X次,然后将效果称为X次。这就是指
然后调用$$效果也要三遍。
正如@ibenjelloun在评论中所建议的那样,请执行addFields
动作并具有一系列作为有效载荷的项目。