RxJs Return 旧值 when when filter return false
RxJs Return old value when when filter return false
此代码的主要目的是检查存储中是否存在值并防止向服务器发出额外请求。整个逻辑工作正常但不幸的是,当 filter returns false 选择器未应用于 observable 并且数组为空时,即使值在存储中也是如此。
this.events$ = this.paginationService.page$.pipe(
switchMap(pageIndex => this.store.pipe(
delay(0),
//get objects from store
select(selectEventsPageByGenre(this.musicGenre, { pageIndex: pageIndex, pageSize: 3 })),
//if there are no objects from select() the dispatch server request
filter(events => events.length === 0),
map(() => {
this.store.dispatch(new EventsPageRequested({
musicGenre: MusicGenre[this.musicGenre.toUpperCase()],
page: {
pageIndex: pageIndex,
pageSize: 6
}
}));
return [];
})
))
);
当过滤器 return 为 false(如果数组不为空)时,如何 return 来自选择器的值?
提前致谢
只需删除 filter()
,并将 map()
替换为
map(() => {
if (events.length > 0) {
return events;
}
this.store.dispatch(new EventsPageRequested({
musicGenre: MusicGenre[this.musicGenre.toUpperCase()],
page: {
pageIndex: pageIndex,
pageSize: 6
}
}));
return [];
})
此代码的主要目的是检查存储中是否存在值并防止向服务器发出额外请求。整个逻辑工作正常但不幸的是,当 filter returns false 选择器未应用于 observable 并且数组为空时,即使值在存储中也是如此。
this.events$ = this.paginationService.page$.pipe(
switchMap(pageIndex => this.store.pipe(
delay(0),
//get objects from store
select(selectEventsPageByGenre(this.musicGenre, { pageIndex: pageIndex, pageSize: 3 })),
//if there are no objects from select() the dispatch server request
filter(events => events.length === 0),
map(() => {
this.store.dispatch(new EventsPageRequested({
musicGenre: MusicGenre[this.musicGenre.toUpperCase()],
page: {
pageIndex: pageIndex,
pageSize: 6
}
}));
return [];
})
))
);
当过滤器 return 为 false(如果数组不为空)时,如何 return 来自选择器的值?
提前致谢
只需删除 filter()
,并将 map()
替换为
map(() => {
if (events.length > 0) {
return events;
}
this.store.dispatch(new EventsPageRequested({
musicGenre: MusicGenre[this.musicGenre.toUpperCase()],
page: {
pageIndex: pageIndex,
pageSize: 6
}
}));
return [];
})