Skip to content

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 等延迟写入

MIT License