【发布时间】:2021-01-19 05:06:03
【问题描述】:
使用 jQuery 3.1.0,我正在创建未知数量的 $.ajax() 请求,并将生成的 promise(s) 添加到数组中:
myArray.push($.ajax(...).promise());
完成所有请求后,我想调用一个函数,据我所知可以使用:
$.when.apply($, myArray).then(myFunction, errorHandlingFunction);
但是,myFunction 抛出了一个被 jQuery 吞噬的错误(在测试期间,我的所有函数都调用了 throw new Error())。我可以看到调用mightThrow() 后执行进入catch 并正确拒绝了延迟,但这从未在控制台中显示。
即使执行以下省略了 apply 调用的操作,也会导致错误被完全吞没;调试器行也永远不会被命中:
myArray[0].then(function() {
throw new Error('test error');
}, function() { debugger; });
删除when() 并执行以下操作会导致执行中断:
myArray[0].done(() => {
throw new Error('test error');
}).fail(function(){ debugger; });
似乎then()执行的函数中出现的错误总是被吞掉。另外,$.when(...).done(...)如果done()里面的函数抛出,也会导致错误被吞掉。
我是否误解了什么或者这是 jQuery 的错误/功能?
【问题讨论】:
-
查看我的答案,因为它与您的代码相关:stackoverflow.com/a/39206980/104380
标签: javascript jquery