• 分页加载数据

    Type Parameters

    • TResult

      返回结果项类型

    • Response

      接口响应类型

    Parameters

    • firstPage: number

      页面起始基准(0-based / 1-based,需与后端API保持一致)

    • load: ((page: number) => Promise<Response>)

      加载方法,接收页码返回Promise

    • getTotalPages: ((resp: Response) => number)

      从响应中提取总页数的方法

        • (resp): number
        • Parameters

          Returns number

    • getItems: ((resp: Response) => TResult[])

      从响应中提取结果列表的方法

    • Optionalopt: {
          onError?: ((error: unknown) => void);
          onPage?: ((resp: Response) => void);
      }

      可选配置项

      • OptionalonError?: ((error: unknown) => void)

        错误回调函数(可选)

          • (error): void
          • Parameters

            • error: unknown

            Returns void

      • OptionalonPage?: ((resp: Response) => void)

        每页加载完成回调函数(可选)

          • (resp): void
          • Parameters

            Returns void

    Returns Promise<TResult[]>

    合并后的结果列表

    从指定起始页开始,自动加载所有分页数据并合并结果

    // 基础用法:加载用户数据
    const users = await loadByPage(
    1,
    (page) => api.get('/users', { params: { page } }),
    (resp) => resp.data.pagination.totalPages,
    (resp) => resp.data.list
    );
    // 高级用法:带回调监控和错误处理
    const products = await loadByPage(
    1,
    (page) => productAPI.list({ page, pageSize: 50 }),
    (resp) => Math.ceil(resp.totalCount / 50),
    (resp) => resp.items,
    {
    onError: (err) => sentry.captureException(err),
    onPage: (resp) => {
    console.log(`Loaded ${resp.items.length} items from page ${resp.page}`)
    }
    }
    );
    // 中断场景:当某页返回空时自动停止
    // 注意:loadByPage会在遇到空响应时自动终止加载
    const comments = await loadByPage(...);