Skip to content

调试模式

同步器与传输层均提供 debug 选项,开启后会触发调试事件,方便观察同步过程中的每一个操作。

Syncer 调试

在同步器选项中开启 debug

typescript
const syncer = store1.sync(store2, {
    debug: true,
});

// 本地 store 的写操作(无论是否被发送)
syncer.on("localOperate", (operate) => {
    console.log("[本地操作]", operate.type, operate.path, operate.value);
});

// 从远程接收到的操作(无论是否被应用)
syncer.on("remoteOperate", (operate) => {
    console.log("[远程操作]", operate.type, operate.path, operate.value);
});
loading

演示中开启了 debug: true:在任一侧修改状态后,下方流水实时输出 localOperate(本地写操作)与 remoteOperate(接收到的远程操作)的完整信息,包括操作类型、路径与值,可用于排查循环同步、验证过滤与路径映射是否生效。

事件 触发时机 参数
localOperate 本地 store 发生写操作 StateOperate
remoteOperate 接收到远程操作 StateRemoteOperate

提示

localOperate/remoteOperate 事件仅在 debug: true 时触发,避免生产环境的性能损耗。

Transport 调试

在传输器选项中开启 debug,会在接收到每一条消息时触发 operate 事件:

typescript
import { LocalTransport } from "@autostorejs/syncer";

let transport1: LocalTransport, transport2: LocalTransport;
transport1 = new LocalTransport(() => transport2, { debug: true });
transport2 = new LocalTransport(() => transport1, { debug: true });

transport1.on("operate", (operate) => {
    console.log("[收到消息]", operate);
});

transport1.connect();
transport2.connect();

其他事件

同步器与传输器还提供以下事件用于监控同步生命周期:

事件 来源 说明
start Syncer 同步启动时触发
stop Syncer 同步停止时触发
syncing Syncer 首次全量同步完成时触发(参数为对方 id)
error Syncer/Transport 发生错误时触发
connect Transport 连接建立时触发
disconnect Transport 连接断开时触发
timeout Transport 心跳超时(连接可能已断开)

排查循环同步

如果出现状态「自己同步自己」导致的死循环,可以结合调试事件观察 operate.idoperate.flags

typescript
syncer.on("remoteOperate", (operate) => {
    // id 应为对方 syncer 的 id,若等于本地 id 说明收到了自己发的消息
    console.log("来源:", operate.id, "本地:", syncer.id);
});

内部机制:同步器使用 flags 标记操作来源——远程写入本地时使用负数 flags,本地监听到该操作后不会再转发,从而防止循环更新。