【发布时间】:2017-12-21 16:57:31
【问题描述】:
我不确定这篇文章的标题是否很好地解释了我的问题,但这是我的情况。
我有一棵树,上面有懒洋洋的孩子。当您展开一个树节点时,它会将一个 LoadChildrenAction 与刚刚展开为有效负载的父节点一起分派。
这是我的效果:
@Effect()
loadChildren$: Observable<Action> = this.actions$
.ofType(ActionTypes.LOAD_CHILDREN).switchMap((action: LoadChildrenAction) => {
return this.categoryService.loadChildren(action.payload).map(
children =>
new LoadChildrenSuccessAction({
parent: action.payload,
children
})
);
});
如果我只扩展一个节点,这将完美运行。 LoadChildrenSuccessAction 已调度,并在我的减速器中更新树。
但是,如果我展开一个节点,然后在第一个操作完成之前展开另一个节点,那么只有最后一个操作完成。
也就是说,我展开一个节点,然后在第一个节点还在加载的时候立即展开另一个节点。第二个树节点使用其子内容进行更新,但第一个从未更新。事实上,两个 LoadChildrenActions 被分派 - 每个扩展一个 - 但只有 一个 LoadChildrenSuccessAction 被分派。
如果我在我的categoryService.loadChildren 函数中放置一个console.log,它会被记录两次——因此服务会被调用两次。但是只有一个动作被调度,所以我失去了第一个动作 - 它永远不会完成。
知道我在这里做错了什么吗?
【问题讨论】:
-
您可能想阅读Learn to combine RxJs sequences with super intuitive interactive diagrams 以了解
switchMap和mergeMap之间的区别
标签: angular typescript rxjs ngrx ngrx-effects