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]),

        ),
    ),
);