* 模块级“最新一次请求生效”并发控制器:
* - 非 force 调用在已有请求在途时直接跳过(防轮询叠加);
* - force 调用总是发起新请求,旧请求的写操作通过 isLatest() 检查被丢弃;
* - 只有最新请求的收尾才复位在途标记,避免旧请求提前复位导致并发交错。
*/
export function createLatestRunner() {
let seq = 0
let inFlight = false
return {
isInFlight: () => inFlight,
async run(force: boolean, fn: (isLatest: () => boolean) => Promise<void>): Promise<void> {
if (!force && inFlight) return
inFlight = true
const current = ++seq
const isLatest = () => current === seq
try {
await fn(isLatest)
} finally {
if (isLatest()) {
inFlight = false
}
}
},
}
}