美文网首页
分页接口中,一次加载所有数据逻辑实现

分页接口中,一次加载所有数据逻辑实现

作者: TOPro | 来源:发表于2018-08-06 15:03 被阅读24次

    一次加载所有分页数据的实现

    /**
     * 一次请求所有分页数据
     * @param rows  每页请求多少
     * @param requestPageFunction 请求的执行者
     *          规范,注意要返回promise
     *          function(page,size){
     *              let params = { page, size }
     *              return axios("path/to","get",{params})
     *                  .then(resp=>{
     *                      return {
     *                          rows:resp.data,
     *                          totalCount:resp.total
     *                      }
     *                  })
     *              ;
     *          })
     * @param startPage 开始页,默认1
     * @returns {Promise<any>}
     */
    export default (rows=10,requestPageFunction,startPage=1)=>{
        return new Promise((resolve,reject)=>{
            requestPageFunction(startPage,rows)
                .then(resp=>{
                    if(resp.totalCount<=rows){
                        resolve(resp.rows);
                    }else{
                        let _total = ~~((resp.totalCount - 1)/rows) + 1;
                        let _pageList = new Array(_total - 1).fill(1).map((v,index)=>index+1+startPage);
                        Promise.all(_pageList.map(page=>requestPageFunction(page,rows)))
                            .then(respList=>{
                                let ret = resp.rows;
                                respList.forEach(_resp=>{
                                    if(_resp.status) reject(_resp);
                                    Array.prototype.push.apply(ret,_resp.rows)
                                });
                                resolve(ret);
                            })
                            .catch(reject)
                        ;
                    }
                })
            ;
        })
    }
    

    相关文章

      网友评论

          本文标题:分页接口中,一次加载所有数据逻辑实现

          本文链接:https://www.haomeiwen.com/subject/nnqgvftx.html