5

我想从我的效果中多次分派一个动作,为此我正在使用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;

}
4

2 回答 2

1

在这种情况下,您应该使用 flatmap。这应该工作:

@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;
}
于 2018-06-27T08:33:03.810 回答
1

我认为您的问题是 concatMapped Observable 在传递给它的最后一个 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;
    }
于 2017-08-09T10:49:16.693 回答