FlushGate
解决"主链路已 idle,但 trace/score 还在异步上报"的问题。
通过 observer.gate 访问,不直接实例化。
方法
gate.waitAll(): Promise<void>
等待所有已注册的异步操作完成或超时(默认 8000ms)。
ts
await observer.gate.waitAll()进程退出前必须调用
不调用 waitAll() 可能导致 trace 和 score 丢失,低流量下更容易复现。
gate.hasPending(): boolean
检查是否有待完成的异步操作。
ts
if (observer.gate.hasPending()) {
console.log("还有数据待上报...")
}gate.register(id: string, promise: Promise<unknown>): void
注册一个异步任务到 gate(通常由 SDK 内部调用)。
ts
// 内部使用示例
gate.register("flush-session-1", transport.flush())超时说明
- 每个任务最多等待
timeoutMs(默认 8000ms) waitAll()等待所有当前 pending promise settle 或超时- promise 错误会被吞掉,不影响业务退出
注册时机
SDK 会在以下场景自动注册任务到 gate:
observer.endRun()后的transport.flush()run.score()的异步写入- 宿主 adapter 中 session score 等延迟写入