fix(tracer): 修复异步scope中异常处理后的状态设置问题

发生ScopeError时不执行flush,否则即便抛出异常也会执行flush
This commit is contained in:
2026-02-24 20:33:59 +08:00
parent 8a2399e890
commit 19d4b97669

View File

@@ -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();
});