我的codebase / dev环境在过去一周或两周的某个时刻出现了以下问题:
我的javascript在Angular的控制范围内引发的任何错误都不会记录到Firebug控制台。
============================
我已尝试以下两种方法进行测试:
var x;
var y = x.test();
和
throw new Error('test');
我希望期望这两者都应该以基本相同的方式运行:JS停止执行并且控制台打印错误消息。 在我测试的所有情况下,这两个都的行为相同,所以我只使用下面的throw示例。
如果我只是在页面上包含一个Angular脚本的开头(即.js
文件,它恰好使用了角度,并且在<script>
标签中。然后我 DO 得到我的错误。
e.g。
var app = angular.module("AbiApp", []);
console.log('test1'); // I see this.
throw new Error('test2'); // I DO see this.
console.log('test3'); // I don't see this. (as expected)
app.controller('HomeController', ['$scope', function ($scope) {
});
如果我在Angular代码中的回调中出错(即在Angular的正常控制范围内某处;在某处,我必须添加$ apply()有更改立即更新)然后,再次, DO 在相关点获取我的错误。 e.g。
var app = angular.module("AbiApp", []);
app.controller('HomeController', ['$scope', function ($scope) {
// We're using SignalR
$.connection.hub.start().done(function () {
console.log('test1'); // I see this.
throw new Error('test2'); // I DO see this.
console.log('test3'); // I don't see this. (as expected)
});
});
但是如果我在Angular的代码中抛出我的错误(例如在控制器的定义函数的顶部)或者我故意错误拼写Angular对象的一个依赖项。然后我不要在控制台上出现任何错误,但JS DOES 停止执行。 e.g。
app.controller('HomeController', ['$scope', function ($scope) {
console.log('test1'); // I see this.
throw new Error('test2'); // I don't see this. :(
console.log('test3'); // I don't see this.
});
或
app.controller('HomeController', ['$scpe', function ($scope) {
// ***** No error thrown.
console.log('test1'); // I don't see this.
});
如果我在Chrome中重复,那么我会收到所有错误。 如果我禁用Firebug并打开Firefox控制台,那么我会收到所有错误。
所以我得出结论,Angular已经决定它不喜欢我的Firebug控制台,因此除非我直接调用console.log()
,否则它不会记录到它。 WTF?
我试过了:
在任何这些情况下症状都没有变化。
答案 0 :(得分:1)
这一点都不令人满意,但我通过工厂重置Firebug解决了这个问题。
Firebug FAQ在“How do I reset all Firebug options”上有特定条目:
萤火虫菜单&gt;选项&gt;重置所有Firebug选项
现在我在所有地方都有错误。
如果有人能够猜测我可能会遇到什么样的设置,那我就会听错了!