javascript - 在遍历一个可观察对象后触发一个动作
问题描述
我对 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 并一一删除它们。在循环结束时,我只想执行一些操作。我尝试使用.map
,mergemap
但它没有用。
解决方案
看起来它们是冷可观察对象(它们有结束)如果这是真的,那么您可以使用“.subscribe()”的“onCompleted”方法
.subscribe(onNext(), onError(), onCompleted())
如果它是一个热可观察对象(例如像事件发射器之类的东西),您必须根据您拥有的信息使用像 bufferCount() 或 bufferTime() 这样的缓冲区。
抱歉,简而言之很难解释冷/热观测值
推荐阅读
- python - 为什么 bash 仍在搜索 conda?
- css - 打印 css 样式不适用于 Angular 项目
- react-native - React Native Flatlist 非常慢
- blockchain - 未能在 IBM Blockchain Platform 中实例化链码
- sql - 得到 ORA-01407:cannot update to null 错误
- javascript - 正则表达式 Javascript - 无效的正则表达式:没有重复的数字输入
- ios - UITableViewDelegate:通过添加默认实现来减少重复代码,有更好的主意吗?
- swift - 是否可以在运行时使用 AutoLayout 根据屏幕高度或屏幕宽度中的最大值来制作 1:1 的纵横比?
- php - 如何将 Wordpress 文件从 localhost 传输到 azure
- javascript - Dojo:浮动窗格在关闭和重新打开时抛出错误