fix(tracer): 修复异步scope中异常处理后的状态设置问题
发生ScopeError时不执行flush,否则即便抛出异常也会执行flush
This commit is contained in:
@@ -56,7 +56,6 @@ const createTracerContext = () => {
|
|||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
// 由于JavaScript/TypeScript在语言层面缺乏统一的“程序退出钩子”机制,
|
// 由于JavaScript/TypeScript在语言层面缺乏统一的“程序退出钩子”机制,
|
||||||
// 所以我们无法在算法执行结束后自动地输出指令序列和异常信息,
|
// 所以我们无法在算法执行结束后自动地输出指令序列和异常信息,
|
||||||
// 尽管像Node.js这样的运行时提供了process.on('exit'),但是我们希望保持SDK的环境无关性,
|
// 尽管像Node.js这样的运行时提供了process.on('exit'),但是我们希望保持SDK的环境无关性,
|
||||||
@@ -77,15 +76,16 @@ const createTracerContext = () => {
|
|||||||
// 如果routine是异步函数,需要用catch捕获异步错误
|
// 如果routine是异步函数,需要用catch捕获异步错误
|
||||||
if (result instanceof Promise) {
|
if (result instanceof Promise) {
|
||||||
result
|
result
|
||||||
|
.then(() => {
|
||||||
|
scopeResult.state = SCOPE_STATE.SCOPED;
|
||||||
|
flush();
|
||||||
|
})
|
||||||
.catch((error) => {
|
.catch((error) => {
|
||||||
// 如果是ScopeError,需要抛出,否则会在嵌套调用scope时被外层scope捕获
|
// 如果是ScopeError,需要抛出,否则会在嵌套调用scope时被外层scope捕获
|
||||||
if (error instanceof ScopeError) {
|
if (error instanceof ScopeError) {
|
||||||
throw error;
|
throw error;
|
||||||
}
|
}
|
||||||
scopeResult.exception.stack = (error as Error).stack;
|
scopeResult.exception.stack = (error as Error).stack;
|
||||||
})
|
|
||||||
.finally(() => {
|
|
||||||
// 无论是否有异常,都需要设置本次的scope状态
|
|
||||||
scopeResult.state = SCOPE_STATE.SCOPED;
|
scopeResult.state = SCOPE_STATE.SCOPED;
|
||||||
flush();
|
flush();
|
||||||
});
|
});
|
||||||
|
|||||||
Reference in New Issue
Block a user