gpt4 book ai didi

javascript - 为什么 javascript Promise 在错误日志中显示 位置?

转载 作者:行者123 更新时间:2023-11-28 17:12:55 24 4
gpt4 key购买 nike

我想在我的代码库中记录文件名、行号、列号。为此,我正在使用 _thisLine()。它基本上获取行号。通过创建(而不是抛出)错误。但是如果我从 Promise 调用 thisLine() ,这种方法就会失败

你能帮帮我吗?

    function _thisLine() {
const e = new Error();
const regex = /\((.*):(\d+):(\d+)\)$/;
const match = regex.exec(e.stack.split("\n")[2]); //i dont want to change thisLine function
return match
? {
filepath: match[1],
line: match[2],
column: match[3]
}
: "NOT FOUND";
}
function without() {
return _thisLine(); // this is ok
}
function withPromise() {
return new Promise(function(resolve, reject) {
var result = _thisLine(); //inside promise unable to capture current line number
resolve(result);
});
}
console.log("without Promise", without());
withPromise().then(function(result) {
console.log("with Promise", result);
});

我希望 withPromise 返回触发点位置但由于 promise ..我无法找到触发点

enter image description here

回答(我的解决方法)!对我有用!

  private _thisLine() {
const e = new Error();
// for path like - 'LogWrapper.debug (D:\\Projects\\rrr\\node\\build\\server\\log_server\\log_wrapper.js:101:14)'
const regex1 = /\((.*):(\d+):(\d+)\)$/;
// for path like - 'D:\\Projects\\rrr\\node\\build\\server\\http_repo\\labtest_repo.js:58:24'
const regex2 = /(.*):(\d+):(\d+)$/;

let match = null,
callStackDepth = 2,
errorExploded = e.stack.split("\n");

while (!!!match) {
//match both kind of path patterns
match =
regex1.exec(errorExploded[callStackDepth]) ||
regex2.exec(errorExploded[callStackDepth]);

//if not found then move to nearest path
callStackDepth--;
}

return {
filepath: match[1],
line: match[2],
column: match[3]
};
}

最佳答案

我认为你需要修复你的正则表达式。 (我不是正则表达式中的专家)我猜测您的正则表达式期望位置数据包含在括号“()”内,并且当其在 promise 内触发时,因为 e.stack.split( 没有返回括号) "\n")[2] ,对其执行正则表达式返回 null。

我添加了一些console.log来打印值

function _thisLine() {
const e = new Error();
const regex = /\((.*):(\d+):(\d+)\)$/;
const match = regex.exec(e.stack.split("\n")[2]);
console.log('trigger location...'+e.stack.split("\n")[2]);
console.log('match...'+match);
return match
? {
filepath: match[1],
line: match[2],
column: match[3]
}
: "NOT FOUND";
}
function without() {
return _thisLine(); // this is ok
}
function withPromise() {
return new Promise(function(resolve, reject) {
var result = _thisLine(); //inside promise unable to capture current line number
console.log('result is ...' + result);
resolve(result);
});
}
console.log("without Promise", without());
withPromise().then(function(result) {
console.log("with Promise", result);
});

关于javascript - 为什么 javascript Promise 在错误日志中显示 <anonymous> 位置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54056974/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com