Javascript 抛出新错误(字符串)未显示在F12中

Javascript 抛出新错误(字符串)未显示在F12中,javascript,jquery,error-handling,Javascript,Jquery,Error Handling,我有一个JS脚本抛出了一个错误 $.when(verifyInitArgs(initArgs)) .then(function argsAreValid() { initialiseForm(); }, function argsInvalid(error) { throw new Error(error); }); 错误变量是一个字符串。设置断点时,我可以通过typeof看到这一点: >> typeof error "str

我有一个JS脚本抛出了一个
错误

$.when(verifyInitArgs(initArgs))
    .then(function argsAreValid() {
        initialiseForm();
    }, function argsInvalid(error) {
        throw new Error(error);
    });
错误
变量是一个
字符串
。设置断点时,我可以通过
typeof
看到这一点:

>> typeof error
"string"
但是,抛出的错误不会显示在IE或Firefox的控制台窗口中

如果我输入
抛出新错误(“某物”)直接在浏览器控制台中,然后按预期工作,在控制台中显示为错误


这里发生了什么?

回想一下
然后
(和
catch
等等)创建一个新的承诺,即回调中的代码可以影响结果。在Promises/A+风格的承诺中(JavaScript的本机承诺遵循这些语义,jQuery一直在努力实现延迟——我相信您现在使用的v3.1.1已经实现了),当您抛出一个承诺
然后
catch
回调时,该例外情况被转换为拒绝由
然后
catch
方法创建的承诺

因此,您的
抛出新错误(…)
正在成为对您调用
then
返回的承诺的拒绝

浏览器正在更新其对未处理拒绝的处理,以便这些拒绝出现在控制台中(目前对此的支持有所不同);这可能值得转向本土承诺

下面是一个在
then
回调中抛出本机承诺的示例:

新承诺(函数(解析){
console.log(“第一承诺解析”);
决心(“一切都好”);
}).然后(功能(分辨率){
console.log(“获得分辨率”+分辨率);
log(“来自第二个承诺的抛出错误”);
抛出新错误(“确认!”);

});您使用的jQuery版本是什么?这可能很重要,因为他们一直在努力使其延迟对象符合承诺/A+spec.@T.J.Crowder
3.1.1
m,但是我可以看到承诺没有问题,因为我可以在
throw
行上点击一个断点,看到
error
的值。可能更容易使用
控制台。error(“Eek”)
。只要它不是默默地失败,我就很高兴。@BanksySan::-)的确如此。