partialCb【分片加载】
描述
分片加载,适用于一次性渲染大量数据
# 1.示例
复制代码
# 2.入参说明
# 主入参
| 参数 | 说明 | 类型 | 是否必填 | 默认值 |
|---|---|---|---|---|
| data | 数据 | Array | 是 | - |
| beforeCb | 运行之前回调函数 | Function | - | - |
| loopLength | loopLength 每次分片的大小 | Number | - | - |
| cb | 运行每次分片回调函数 | Function | - | - |
| afterCb | 运行结束回调函数 | Function | - | - |
# 3.源码
源码,点开查看 👈
/**
* 分片加载
* @param {Array} data 数据
* @param {Function} beforeCb 开始之前执行
* @param {Function} cb 回调函数
* @param {Function} afterCb 结束后回调
* @param {Number} loopLength 每次分片的大小
* @param {Function} afterCb 运行结束回掉函数
*/
import { _requestAnimationFrame } from './_constant'
import isPromise from '@/base/isPromise'
function partialCb({ data = [], beforeCb, cb = new Function(), loopLength = 100, afterCb }) {
const totalLoop = Math.ceil(data.length / loopLength)
const _context = this
let partialIndex = 0
beforeCb && beforeCb()
async function loadPartCb(_data) {
let partialData = _data.slice(partialIndex * loopLength, loopLength * (partialIndex + 1))
const p = cb(partialData, partialIndex, _data)
if (isPromise(p)) await p
if (partialIndex < totalLoop) {
partialIndex++
_requestAnimationFrame(loadPartCb.bind(_context, _data))
} else {
afterCb && afterCb()
}
}
_requestAnimationFrame(loadPartCb.bind(_context, data))
}
export default partialCb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
上次更新: 2025/07/01, 14:52:29