From 19d4b976698c91a3d6747cbd690212e4fc8c8716 Mon Sep 17 00:00:00 2001 From: skycurtain Date: Tue, 24 Feb 2026 20:33:59 +0800 Subject: [PATCH] =?UTF-8?q?fix(tracer):=20=E4=BF=AE=E5=A4=8D=E5=BC=82?= =?UTF-8?q?=E6=AD=A5scope=E4=B8=AD=E5=BC=82=E5=B8=B8=E5=A4=84=E7=90=86?= =?UTF-8?q?=E5=90=8E=E7=9A=84=E7=8A=B6=E6=80=81=E8=AE=BE=E7=BD=AE=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 发生ScopeError时不执行flush,否则即便抛出异常也会执行flush --- tracers.ts/src/context/tracer-context.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tracers.ts/src/context/tracer-context.ts b/tracers.ts/src/context/tracer-context.ts index 51ad4d6..da1c13a 100644 --- a/tracers.ts/src/context/tracer-context.ts +++ b/tracers.ts/src/context/tracer-context.ts @@ -56,7 +56,6 @@ const createTracerContext = () => { }; }; - // 由于JavaScript/TypeScript在语言层面缺乏统一的“程序退出钩子”机制, // 所以我们无法在算法执行结束后自动地输出指令序列和异常信息, // 尽管像Node.js这样的运行时提供了process.on('exit'),但是我们希望保持SDK的环境无关性, @@ -77,15 +76,16 @@ const createTracerContext = () => { // 如果routine是异步函数,需要用catch捕获异步错误 if (result instanceof Promise) { result + .then(() => { + scopeResult.state = SCOPE_STATE.SCOPED; + flush(); + }) .catch((error) => { // 如果是ScopeError,需要抛出,否则会在嵌套调用scope时被外层scope捕获 if (error instanceof ScopeError) { throw error; } scopeResult.exception.stack = (error as Error).stack; - }) - .finally(() => { - // 无论是否有异常,都需要设置本次的scope状态 scopeResult.state = SCOPE_STATE.SCOPED; flush(); });