我想从我的效果中多次发出一个动作,为此我正在使用concatMap
,但是当我发送相同的动作时,它会被下一次发送取消。有没有办法在上一次调度完成时调度一个动作。
下面的代码将有助于更好地理解问题。
@Effect()
setCategory$ = this.actions$
.ofType(GET_SESSION_AD_SUCCESS)
.concatMap((action: Action) => {
const category = action.payload;
const categoryPath = category.path;
const categoryDispatchArray = [];
categoryPath.forEach((path, index) => {
categoryDispatchArray.push({
type: GET_SUBCATEGORIES_BY_PARENT,
payload: { categoryId: path.id, index }
});
})
return dispatchArray;
}
答案 0 :(得分:1)
在这种情况下,您应该使用平面地图。这应该可以工作:
@Effect()
setCategory$ = this.actions$
.ofType(GET_SESSION_AD_SUCCESS)
.map((action) => action.payload)
.flatMap((payload) => {
const category = payload;
const categoryPath = category.path;
const categoryDispatchArray = [];
categoryPath.forEach((path, index) => {
categoryDispatchArray.push({
type: GET_SUBCATEGORIES_BY_PARENT,
payload: { categoryId: path.id, index }
});
})
return dispatchArray;
}
答案 1 :(得分:0)
我认为你的问题是当传递给它的最后一个Observable已经关闭时,concatMapped Observable会关闭。您需要的是mergeMap
(又名flatMap
)。
此外,我还会使用.map
来创建dispatchArray:
@Effect()
setCategory$ = this.actions$
.ofType(GET_SESSION_AD_SUCCESS)
.mergeMap((action: Action) => {
const category = action.payload;
const categoryPath = category.path;
const categoryDispatchArray = categoryPath
.map((path, index) => ({
type: GET_SUBCATEGORIES_BY_PARENT,
payload: { categoryId: path.id, index }
});
return categoryDispatchArray;
}