遍历可观察对象后触发动作

时间:2018-07-03 11:40:25

标签: javascript redux react-redux rxjs rxjs5

我对rxjs很陌生。我只想在可观察对象停止发射数据后触发redux动作。

const removeUsersEpic = (action$, store) =>
  action$
    .ofType(REMOVE_USERS)
    .mergeMap(action =>
      Rx.Observable.from(action.payload).mergeMap(user => {
        return Rx.Observable.authorizedAjax({
          headers: { 'Content-Type': 'application/form-data' },
          method: 'DELETE',
          url: `${consoleBaseUrl}/api/v1/users/${user}`,
          body: {}
        })
          .mergeMap(() =>
            Rx.Observable.of(
              setUserDeleteCount(store.getState().components.userListComponentData.deletedUserCount + 1),
              getUserCount()
            )
          )
          .catch(error => {
            console.log(error)
            return Rx.Observable.of(
              setUserDeleteExceptionCount(
                store.getState().components.userListComponentData.deleteUserExceptionCount + 1
              ),
              getUserCount()
            )
          })
      }).map(()=>{return setDeleteOperationStatus(true)})
    )
    .catch(error => {
      console.log(error)
      return Rx.Observable.empty()
    })

在此示例中,我试图在最后触发setDeleteOperationStatusaction.payload只是要删除的用户ID列表。我正在遍历id并逐一删除它们。在循环结束时,我只想执行一些操作。我尝试使用.mapmergemap,但是没有用。

1 个答案:

答案 0 :(得分:0)

看起来像是冷观测(它们已经结束了) 如果是这样,则可以使用“ .subscribe()”的“ onCompleted”方法

.subscribe(onNext(),onError(),onCompleted())

如果是可观察到的热点(例如事件发射器之类的东西) 您必须根据所获得的信息使用诸如bufferCount()或bufferTime()之类的缓冲区。

对不起,简而言之很难解释冷/热观测值