Javascript 在我的angular controller中调试承诺,如果错误消息中没有文件名和lineno,调试将非常困难
我得到了一系列包含的函数,其中一个函数有一个错误,但是哪一个,在哪里?我怎么能看出来 这是浏览器报告错误的地方:Javascript 在我的angular controller中调试承诺,如果错误消息中没有文件名和lineno,调试将非常困难,javascript,angularjs,promise,Javascript,Angularjs,Promise,我得到了一系列包含的函数,其中一个函数有一个错误,但是哪一个,在哪里?我怎么能看出来 这是浏览器报告错误的地方: Promise.all([findProperties]) .then(makeReport) .then(showReport) .catch(err => { console.log("ERROR: " + err.message ); console.log("ERROR: " + err.file );
Promise.all([findProperties])
.then(makeReport)
.then(showReport)
.catch(err => {
console.log("ERROR: " + err.message );
console.log("ERROR: " + err.file );
console.log("ERROR: " + err.lines );
throw new Error('Higher-level error. ' + err);
})
.catch(err => {
console.log("reportAgentSaleController ERROR: " + err);
})
Like 63是第一个console.log
index.js:63 ERROR: Cannot read property 'replace' of undefined
index.js:64 ERROR: undefined
index.js:65 ERROR: undefined
index.js:69 ERROR: Error: Higher-level error. TypeError: Cannot read property 'replace' of undefined
当我得到包含数百行替换命令的9 include代码时,很难发现这个错误
我怎样才能找出哪里和在什么文件中出错
编辑-尝试拒绝
下面是一个例子。控制台日志将像这样返回
here comes the error (line 114)
err: ReferenceError: conXXXsole is not defined (line 102)
错误实际上在第115行,那么我如何让它告诉我它在第115行呢
function testErr(){
var first = new Promise(
(resolve, reject) => {
if (1==1) {
resolve();
} else
reject();
});
var second = function(){
var test=funcWithErr('aaa');
}
Promise.all([first])
.then(second)
.catch(err => { console.log('err: ' + err) }
)}
function funcWithErr(text){
console.log ('here comes the error') // line 114
conXXXsole.log ('this is the error') // line 115
return text;
}
console.log
不应该帮助它调试,它的唯一目的是记录消息
有许多输出调用堆栈,即error
、warn
和trace
。根据上下文,可以使用其中一个
如果是严重错误,则可以是console.error(error)
,如果是预期错误,则可以是console.warn(error)
AngularJS中惯用的方法是使用$exceptionHandler
服务:
$exceptionHandler(error)
默认实现只是将其委托给$log.error,并将其记录到浏览器控制台中
而$log
只使用控制台
:
默认实现将消息安全地写入浏览器控制台(如果存在)
ES6 promise实现为未捕获的承诺提供了默认处理程序(对于某些现代浏览器和core js
polyfill,这种行为是正确的)。为了调试,可以在catch
中重新抛出错误,并导致错误:
.catch(err => {
console.log("reportAgentSaleController ERROR: " + err);
throw err;
})
尝试在您认为问题所在的位置使用“调试器”。这样做是暂停渲染,然后你可以看到,什么happening@Plankton你是怎么做到的?在CHROME中有什么我必须打开的吗?它只是“调试器”,就是这样。请参阅(查找标记为“Debugger”的部分)。如果makeReport()和showReport()正在进行异步操作,并且那里出现了问题,那么抛出必须在那里,而catch部分正好捕获它。只想到提到.console.log与调试相反。要获取调用堆栈吗?使用console.error、console.warn或保持承诺不受破坏。或者更好地使用调试器,如上所述。单个
调试器代码>语句甚至在没有断点的情况下也会执行此任务。我在重写/修饰$exceptionHandler时遇到的问题是,原因部分并不总是填充。所以,似乎不是每次对我都有效。@Plankton不知道你的意思<代码>原因
是可选的。当然,如果服务没有正确实现,这将导致它出现问题。