Я хочу войти в fileName, lineNo, ColNo в моей кодовой базе. Для этого я использую _thisLine ().
Это в основном получает строку нет. создавая (не выбрасывая) ошибку.
Но этот подход не работает, если я вызываю 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 вернет местоположение точки запуска
но из-за обещания .. я не могу найти триггерную точку
ОТВЕТ (мой обходной путь)! Работает для меня!
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]
};
}