angular - rxjs - 是否有一个 always 运算符?你怎么总是做某事?
问题描述
我有一个 NGRX 效果(大量使用 RxJS),如下所示:
@Effect()
allFiltersRequested$ = this.actions$.pipe(
ofType<AllFiltersRequestedAction>(FiltersActionTypes.AllFiltersRequested),
tap((action) => debug(action)),
withLatestFrom(this.store.pipe(select(selectAllFilters))),
filter(([action, allFilters]) => isEmpty(allFilters)),
mergeMap(() =>
this.simService.getAllFilters().pipe(
catchError(() => {
return of({})
})
)
),
map((allFilters) => new AllFiltersLoadedAction(allFilters))
)
如果存储已被填充(因为来自 API 的数据没有改变),我会使用filter
它来防止发出 HTTP 请求(请参阅参考资料)mergeMap
但是,我总是想执行:
map((allFilters) => new AllFiltersLoadedAction(allFilters))
无论是否发出 HTTP 请求。但是,它不能在之前执行,mergeMap
因为mergeMap
确保allFilters
数据可用。
有没有 RxJSalways do this
类型的运算符?如果没有,我应该如何重构这段代码来实现我想要的?
目前,唯一的解决方案是删除filter
,但这会导致发出不必要的 HTTP 请求。
谢谢
解决方案
只是不要使用filter
并使用条件包装 HTTP 调用if
:
...
withLatestFrom(...)
mergeMap(([action, allFilters]) => {
if (isEmpty(allFilters)) {
return of(allFilters);
}
return this.simService.getAllFilters()...
})
map((allFilters) => new AllFiltersLoadedAction(allFilters))
我不知道你到底想做什么,但我希望你能明白这一点。
推荐阅读
- linq - 使用动态 GroupBy 子句的 Linq 实现
- javascript - 当固定 div 高于其他 div 时更改颜色
- asp.net - 用于检测黑客攻击的 WebResource.axd 和 ScriptResource.axd 的预期参数格式?
- java - 每次我在eclipse中创建一个模块时都会抛出一个错误?
- ios - 合并 n 个 Text 对象
- android - RecyclerView 项目在重启应用后消失
- flask - Flask - 将 python 执行转换为烧瓶运行
- swift - 如何在 Swift 中管理 ViewController 之间的状态?
- c# - microsoft access 未在 windows server 2012 r2 中正确安装
- node.js - 使用 Express 和 GraphQL 而不是简单地使用 Node.js 和 GraphtQL 有什么好处?