Appearance
findAll
▸ findAll(params
): Promise
<any
[]>
基于 p-map 实现的批量数据获取
包含以下核心功能:
根据 initialPageParam 获取第一页数据,并计算出剩余分页信息,使用 p-map 并发请求获取剩余分页数据,与第一页数据合并后返回 控制并发请求数量 支持与 createIO 创建的 table 对象配合使用 使用限制
- 每次最多请求 1000 条数据,即
0 < initialPageParam.limit <= 1000
,默认为 1000 - queryFn 的返回结构必须与知晓云的数据列表结构一致,即
{objects: array, meta: object}
点我查看相关资料 - 使用 sdk 请求数据表时,最好在 select 中配置必须字段,防止数据量过大撑爆云函数内存
参数
Name | Type | Description |
---|---|---|
params | Object | |
params.initialPageParam | undefined | object | 初始请求参数 |
params.queryFn | undefined | (params : { limit : number ; offset : number }) => Promise <{ meta : { total_count : number } ; objects : any [] }> | 当 table 不满足使用场景时,可自定义 queryFn |
params.table | undefined | { count : (options : Pick <TableOperationQueryOptions , "query" >) => BaseTableOperationResponse <number > ; create : <TPlain>(data : object , options : Pick <TableOperationQueryOptions , "plain" > & { plain? : TPlain }) => BaseTableOperationResponse <TPlain extends true ? object : Response <object >> ; createMany : (dataList : object [], options : Pick <TableOperationQueryOptions , "enableTrigger" >) => BaseTableOperationResponse <CreateManyRecordResponse > ; delete : (options : Pick <TableOperationQueryOptions , "offset" | "limit" | "withCount" | "id" | "enableTrigger" >) => BaseTableOperationResponse <any > ; deleteMany : (options : Pick <TableOperationQueryOptions , "query" | "offset" | "limit" | "withCount" | "enableTrigger" >) => BaseTableOperationResponse <DeleteManyRecordResponse > ; find : <TPlain>(options : Pick <TableOperationQueryOptions , "expand" | "query" | "offset" | "limit" | "orderBy" | "select" | "withCount" | "plain" > & { plain : TPlain }) => BaseTableOperationResponse <TPlain extends true ? object [] : Response <FindRecordResponse >> ; findAll : (options : Pick <TableOperationQueryOptions , "expand" | "query" | "orderBy" | "select" > & { initialPageParam : Pick <TableOperationQueryOptions , "offset" | "limit" > ; totalLimit : number }) => BaseTableOperationResponse <object []> ; first : <TPlain>(options : Pick <TableOperationQueryOptions , "expand" | "query" | "offset" | "orderBy" | "select" | "withCount" | "plain" > & { plain : TPlain }) => BaseTableOperationResponse <TPlain extends true ? object : Response <object >> ; get : <TPlain>(options : Pick <TableOperationQueryOptions , "expand" | "select" | "plain" | "id" > & { plain : TPlain }) => BaseTableOperationResponse <TPlain extends true ? object : Response <object >> ; update : <TPlain>(options : Pick <TableOperationQueryOptions , "data" | "query" | "offset" | "limit" | "withCount" | "plain" | "id" | "enableTrigger" | "unset" | "incrementBy" | "append" | "uAppend" | "remove" | "patchObject" > & { plain? : TPlain }) => BaseTableOperationResponse <TPlain extends true ? object : Response <object >> ; updateMany : <TPlain>(options : Pick <TableOperationQueryOptions , "data" | "query" | "offset" | "limit" | "withCount" | "plain" | "enableTrigger" | "unset" | "incrementBy" | "append" | "uAppend" | "remove" | "patchObject" > & { plain? : TPlain }) => BaseTableOperationResponse <TPlain extends true ? UpdateManyRecordResponse : Response <UpdateManyRecordResponse >> } | createIO 创建的 table 对象,会调用 io.table.find 方法 |
params.totalLimit | undefined | number | 表示本次操作允许获取的最大数据总量,默认没有上限 |
返回值
Promise
<any
[]>
示例
ts
function getSubscribeLogs(options) {
const query = io.query
.arrayContains('tags', options.tags)
.compare('status', '=', SUBSCRIBE_LOG_STATUS.IDLE)
if (options.tradeUnionId)
query.compare('trade_union_id', '=', options.tradeUnionId)
if (options.tradeUnionHierarchy) {
query.in('trade_union_hierarchy', options.tradeUnionHierarchy)
}
return findAll({
table: io.subscribeLog,
initialPageParam: {
query,
// 最好是筛选出必须字段,防止数据量过大撑爆云函数内存
select: 'id,created_by',
},
}).then(res => ({
userIds: res.map(item => item.created_by),
subscribeLogIds: res.map(item => item.id),
}))
}
示例
ts
// 自定义 queryFn
function getAllData(options) {
const queryFn = ({offset, limit}) => {
// do something to get data list
return {
objects: [], // your data list
meta: {
total_count: xxxx,
},
}
}
return findAll({queryFn})
}
示例
ts
// 限制本次获取的最大数据数量
// 一般用于清洗数据之类的操作,可以控制每次清洗操作的数据条目
findAll({table, io.xxxTable, initialPageParam: {offset: 0}, totalLimit: 5000})
// 下次执行时跳过前 5000 条记录
findAll({table, io.xxxTable, initialPageParam: {offset: 5000}, totalLimit: 5000})