JS: получение номера строки ошибки внутри `new Function (...)` - PullRequest
0 голосов
/ 21 апреля 2019

В моем приложении я анализирую некоторый пользовательский ввод, а затем запускаю его как код Javascipt, используя (new Function(...))().Если ввод неправильный, это вызывает исключение.Мне нужен способ получить номер строки, в которой произошло исключение в проанализированной строке, которая была предоставлена ​​new Function().Возможно ли это?

1 Ответ

1 голос
/ 21 апреля 2019

Для этого нам нужно написать логику для захвата трассировки стека из объекта ошибки и выяснить, где именно функция anonymous указала, что была выдана ошибка.

Номер строки, в которой выдается ошибка в Chrome, обозначается как <anonymous>:5:17, где, как и в Firefox, он равен Function:5:17

.

try{
 (new Function(`var hello = 10;
                const world = 20;
                let foo = 'bar';
                xyz; //simulating error here
 `))();
}catch(err){
   let line = err.stack.split("\n").find(e => e.includes("<anonymous>:") || e.includes("Function:"));
   let lineIndex = (line.includes("<anonymous>:") && line.indexOf("<anonymous>:") + "<anonymous>:".length) ||  (line.includes("Function:") && line.indexOf("Function:") + "Function:".length);
   console.log(+line.substring(lineIndex, lineIndex + 1) - 2);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...