Import 状态
快速概览
Import 状态 会告诉你哪些操作已应用,哪些因缺少依赖而暂挂。它是处理分布式系统乱序更新的关键工具。
状态结构
interface ImportStatus {
: PeerVersionRange; // 已成功应用的范围
?: PeerVersionRange; // 缺失依赖、暂未应用的范围
}
interface PeerVersionRange {
[: `${number}`]: {
: number; // 包含起点
: number; // 不包含终点(例如 0-50 表示 0-49)
};
}待处理的操作
当某个操作依赖的前置操作缺失(存在因果依赖)时,便会进入 pending 状态。
常见场景:乱序投递
const = new ();
// Peer A 先产生操作 0-4,再产生 5-10
const = new ();
.("text").(0, "Hello");
const = .({ : "update" });
.("text").(5, " World");
const = .({ : "update", : .() });
// 如果 update2 先到达:
const = .();
.(.); // 操作 10-19 暂挂,需要 0-9
// 导入缺失依赖:
.(); // 两个更新都已生效处理 Pending 操作
async function (
: ,
: ,
: (: ) => <>
) {
const = .();
if (.) {
const = await (.());
.();
}
}最佳实践
始终检查状态
const = new ();
const = .();
if (.) {
.("Operations pending:", .);
// 获取缺失的更新
}使用批量导入
const : [] = [
// ...
];
const = new ();
const = .();
// 一次性检查所有更新的状态