首页 > 解决方案 > 在遍历一个可观察对象后触发一个动作

问题描述

我对 rxjs 很陌生。我只想在 observables 停止发送数据后触发 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()
    })

在这个例子中,我试图setDeleteOperationStatus在最后触发。action.payload只不过是要删除的用户标识列表。我正在遍历 id 并一一删除它们。在循环结束时,我只想执行一些操作。我尝试使用.mapmergemap但它没有用。

标签: javascriptreduxreact-reduxrxjsrxjs5

解决方案


看起来它们是冷可观察对象(它们有结束)如果这是真的,那么您可以使用“.subscribe()”的“onCompleted”方法

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

如果它是一个热可观察对象(例如像事件发射器之类的东西),您必须根据您拥有的信息使用像 bufferCount() 或 bufferTime() 这样的缓冲区。

抱歉,简而言之很难解释冷/热观测值


推荐阅读