gpt4 book ai didi

angular - rxjs - 是否有一个always运算符?你总是怎么做某事?

转载 作者:行者123 更新时间:2023-12-02 03:32:22 26 4
gpt4 key购买 nike

我有一个 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 数据可用。

是否有 RxJS 总是执行此 类型运算符?如果没有,我应该如何重构这段代码来实现我想要的?

目前,唯一的解决方案是删除过滤器,但这将导致发出不必要的 HTTP 请求。

谢谢

最佳答案

只是不要使用 filter 并使用 if 条件包装 HTTP 调用:

...
withLatestFrom(...)
mergeMap(([action, allFilters]) => {
if (isEmpty(allFilters)) {
return of(allFilters);
}
return this.simService.getAllFilters()...
})
map((allFilters) => new AllFiltersLoadedAction(allFilters))

我不知道你到底想做什么,但我希望你能明白我的意思。

关于angular - rxjs - 是否有一个always运算符?你总是怎么做某事?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51460608/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com