数据源懒加载分支是低代码平台中按需触发、分段获取、动态组装的数据流路径;它通过generator函数实现可中断、可复用的分页请求管道,并与声明式注册、上下文透传、错误重试机制深度集成,显著降低内存占用并支持无限滚动等场景。

什么是数据源懒加载分支
在低代码平台中,“数据源懒加载分支”指的不是一次性拉取全部数据,而是按需触发、分段获取、动态组装的数据流路径。比如用户拖拽一个“表格组件”,它背后关联的是一个分页 API;但平台不预请求第 1 页以外的数据,直到用户滚动到底部、点击下一页,或切换筛选条件时,才生成对应请求并产出结果——这个“按需触发→构造请求→产出数据”的可控链条,就是懒加载分支。
用 Generator 构建可中断、可复用的数据流管道
Generator 函数天然适合表达这种“暂停-恢复-再产出”的行为。它不返回数组,而是返回一个迭代器对象,每次 next() 调用才执行到下一个 yield,中间状态(如当前页码、已缓存的 token、上一次响应的 cursor)自动保留。
- 定义一个生成器函数,封装分页逻辑:接收初始参数(如 base URL、默认 pageSize),内部维护 page = 1、hasMore = true 等状态
- 每次 yield 前发起一次 fetch,并检查响应中的 next_cursor 或 total 字段,决定是否继续 yield 下一批
- 对外暴露统一接口:调用 gen.next() 即触发一次真实网络请求 + 数据解析,返回 { value: data, done: false } 形式的结果
- 支持中途终止:不再调用 next(),请求自然停止;也可主动 throw() 中断并清理资源(如 abortController)
与低代码运行时深度集成的关键点
低代码平台通常有“数据绑定层”和“组件渲染层”。要让 Generator 真正“优雅”地融入,需注意三处衔接:
-
声明式注册:在组件配置 JSON 中允许声明
"dataSource": { "type": "generator", "fn": "fetchOrdersByStatus" },平台运行时识别后自动实例化生成器,而非执行普通函数 - 上下文透传:生成器内部需能访问当前组件实例的 props(如筛选条件变化)、全局 store(如用户 token)、甚至事件钩子(如 onBeforeFetch)——可通过闭包或注入 context 对象实现
- 错误与重试封装:在 yield 外包裹 try/catch,对网络失败做指数退避重试;失败时 yield 一个带 error 字段的对象,供 UI 层统一展示“加载失败,点击重试”按钮
实际效果对比:传统方式 vs Generator 分支
以一个“订单列表”组件为例:
- 传统方式:初始化时调用
loadAllOrders()→ 拉取全部 10 万条 → 前端内存暴涨、首屏卡顿、用户还没看就切走了 - Generator 分支:
const orderStream = orderGenerator({ status: 'pending' })→ 首次orderStream.next()只拉第 1 页 20 条 → 用户滚动时再调.next()→ 每次只持有一个分页响应体,内存恒定在 KB 级别 - 额外收益:支持“无限滚动”“搜索联想流”“变更监听流”等场景,只需复用同一生成器结构,替换内部 fetch 逻辑即可











