似乎在第一次使用Error.prepareStackTrace
后,error.stack
的输出被缓存:
try {
null();
} catch (error) {
Error.prepareStackTrace = () => {
return 'Hello, World!';
};
console.log('#0', error.stack);
Error.prepareStackTrace = () => {
return 'Hello, Stack Trace!';
};
console.log('#1', error.stack);
}
当前输出:
#0 Hello, World!
#1 Hello, World!
预期产出:
#0 Hello, World!
#1 Hello, Stack Trace!
如何解除error.stack
值,以便进一步使用Error. prepareStackTrace
?如果没有这个,我无法保证当我有error
的实例时,其他人还没有转储堆栈。
答案 0 :(得分:1)
这个怎么样:
var getStackTrace;
Error.prepareStackTrace = () => {
return { toString: () => getStackTrace() };
};
var exception;
try {
null();
} catch (e) {
exception = e;
}
getStackTrace = () => "Hello World.";
console.log(exception.stack);
getStackTrace = () => "Hello Stack Trace.";
console.log(exception.stack);