javascript - 在我的 Angular Controller 中调试 promise ,如果错误消息中没有文件名和 lineno,则非常困难

标签 javascript angularjs promise

我包含了一堆函数,其中一个函数有错误,但是哪个函数在哪里?我怎么能看到呢?

这是浏览器报告错误的地方:

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);
    })

像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 个包含数百行充满替换命令的代码时,真的很难找到该错误。

我怎样才能找出问题出在哪里以及在哪个文件中?

编辑 - 尝试拒绝

这是一个例子。
控制台日志将像这样返回

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 不应该帮助它调试,它的唯一目的是记录消息。

有多个 console methods输出调用堆栈,即errorwarntrace。根据上下文可以使用其中之一。

如果是严重错误,则可以是 console.error(error),如果是预期错误,则可以是 console.warn(error)

AngularJS 中惯用的方法是使用 $exceptionHandler 服务:

$exceptionHandler(error)

The default implementation simply delegates to $log.error which logs it into the browser console.

并且 $log 仅使用 console:

Default implementation safely writes the message into the browser's console (if present).

ES6 Promise 实现为未捕获的 Promise 提供了默认处理程序(这种行为对于某些现代浏览器以及 core-js polyfill 来说都是如此)。为了调试的目的,可以在 catch 中重新抛出错误并导致错误:

.catch(err => {
    console.log("reportAgentSaleController ERROR: " + err);
     throw err;
})

关于javascript - 在我的 Angular Controller 中调试 promise ,如果错误消息中没有文件名和 lineno,则非常困难,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44000607/

相关文章:

Javascript "break"总是命中

javascript - 如何将元素从一个 div 移动到另一个 div 并能够返回到主 div

JavaScript递归类: undefined method

javascript根据选择选项值条件向id添加值

angularjs - 全局配置 Angular 指令

javascript - 如何处理嵌套的 promise ?

javascript - 如何在关闭 Bootstrap 模式后重置 angularjs 的表单验证

javascript - 如何在 Parse.com CloudCode 上创建自定义帮助器模块以与 then() Promise 一起使用?类型错误 : Cannot call method 'then' of undefined

javascript - 全局未处理的拒绝处理程序

javascript - 三.js阴影转换问题