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不知道你的意思<代码>原因
是可选的。当然,如果服务没有正确实现,这将导致它出现问题。