Javascript 抛出新错误(字符串)未显示在F12中
我有一个JS脚本抛出了一个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
错误
$.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.Crowder3.1.1
m,但是我可以看到承诺没有问题,因为我可以在throw
行上点击一个断点,看到error
的值。可能更容易使用控制台。error(“Eek”)
。只要它不是默默地失败,我就很高兴。@BanksySan::-)的确如此。