RXJS链的优化
Optimisation of RXJS chain
一定有更好的方法来做到这一点,对吧?
const source$ = combineLatest([
folder$.pipe(
filter(folder => folder.canBeLoaded()),
),
page$,
sort$,
]).pipe(
takeUntil(this.onceDestroyed$),
switchMap(([folder, page, sort]) => combineLatest([
of(folder),
of(page),
of(sort),
// buffer$: BehaviourSubjhect<number>
buffer$.pipe(
startWith(-1),
pairwise(),
filter(([buffered, wanted]) => wanted > buffered ),
map(([, current]) => current),
distinctUntilChanged(),
),
])),
);
我想到了 withLatestFrom
,但它会 return 每 parent 一次,我需要 buffer$
才能发射多次!
不需要那么复杂,下面应该可以工作upper/lower流总是最新的。
const source$ = combineLatest([
folder$.pipe(
filter(folder => folder.canBeLoaded()),
),
page$,
sort$,
]).pipe(
takeUntil(this.onceDestroyed$),
switchMap(([folder, page, sort]) =>
buffer$.pipe(
startWith(-1),
pairwise(),
filter(([buffered, wanted]) => wanted > buffered ),
map(([, current]) => current),
distinctUntilChanged(),
map(current => [folder, page, sort,current]),
),
),
);
一定有更好的方法来做到这一点,对吧?
const source$ = combineLatest([
folder$.pipe(
filter(folder => folder.canBeLoaded()),
),
page$,
sort$,
]).pipe(
takeUntil(this.onceDestroyed$),
switchMap(([folder, page, sort]) => combineLatest([
of(folder),
of(page),
of(sort),
// buffer$: BehaviourSubjhect<number>
buffer$.pipe(
startWith(-1),
pairwise(),
filter(([buffered, wanted]) => wanted > buffered ),
map(([, current]) => current),
distinctUntilChanged(),
),
])),
);
我想到了 withLatestFrom
,但它会 return 每 parent 一次,我需要 buffer$
才能发射多次!
不需要那么复杂,下面应该可以工作upper/lower流总是最新的。
const source$ = combineLatest([
folder$.pipe(
filter(folder => folder.canBeLoaded()),
),
page$,
sort$,
]).pipe(
takeUntil(this.onceDestroyed$),
switchMap(([folder, page, sort]) =>
buffer$.pipe(
startWith(-1),
pairwise(),
filter(([buffered, wanted]) => wanted > buffered ),
map(([, current]) => current),
distinctUntilChanged(),
map(current => [folder, page, sort,current]),
),
),
);