我有一个非常简单的问题,但是无法弄清楚我在做什么错-我在网上发现的所有解决方案似乎都不对我有用:
打开我的应用程序的特定部分时,将分派一个操作来从后端加载当前的item-Id列表。
一旦检索到此列表-我需要加载我刚刚获得ID的所有项目。
( GET /api/items -> [1,2] -> GET /api/items/1, GET /api/items/2)
我试图用这样的效果解决这个问题:
我选择了mergeMap,因为我想发出一系列动作,但是不关心它们的顺序。
这样做
@Effect() loadList$: Observable<LoadAction[]> = this.actions$.pipe(
ofType<LoadListAction>(LOAD_LIST_ACTION),
mergeMap( _ =>
this.backendService.getItemIds().pipe(
filter( it => it.items.length > 0),
map(response => response.items.map(it => new LoadAction(it.id));
)
)
)
);
给我这个错误:
"invalid action was dispatched" [{"type":"[ITEMS][INIT] load item", "payload":"1"}, {"type":"[ITEMS][INIT] load item", "payload":"2"}],
TypeError: Actions must have a type property
这很有意义,因为现在可观察对象直接发出数组,所以我切换到两次mergeMap:
@Effect() loadList$: Observable<LoadAction[]> = this.actions$.pipe(
ofType<LoadListAction>(LOAD_LIST_ACTION),
mergeMap( _ =>
this.backendService.getItemIds().pipe(
filter( it => it.items.length > 0),
mergeMap(response => response.items.map(it => new LoadAction(it.id));
)
)
)
);
在这里,只有最后一个动作到达减速器(/api/items/2)
,第一个动作消失了,并且从未生效。 (我确认列表的长度为2)。
这是什么问题?
答案 0 :(得分:0)
确保两个动作的Action.type不同,就我而言,我偶然将两个不同动作的type设置为相同。我很难调试它,但最终我能够找到问题。