Turning paginated requests into an Observable stream with RxJs

后端 未结 4 825
渐次进展
渐次进展 2020-12-30 10:28

I have a service which returns data in pages. The response to one page contains details on how to query for the next page.

My approach is to return the response data

4条回答
  •  遥遥无期
    2020-12-30 10:56

    Another one solution is to use retryWhen

    getAllData() {
        let page = 0;
        let result = [];
    
        const getOnePage = () => {
            return of(0).pipe(mergeMap(() => getPaginatedData(page++)));
        };
    
        return getOnePage()
            .pipe(
                map(items => {
                    result = result.concat(items);
                    if (templates.length === PAGE_SIZE) {
                        throw 'get next page';
                    }
                }),
                retryWhen(e => e.pipe(
                    takeWhile(er => er === 'get next page'))
                ),
                map(e => result)
            )
            .subscribe(items => {
                console.log('here is all data', items);
            });
    
    }
    

提交回复
热议问题