我正在尝试发出 ajax 请求并在失败时抛出异常。不幸的是我无法捕捉到异常。我的代码如下所示:
try {
jQuery.ajax('http://www.someurlthatwillproduceanerror.com')
.fail(function () {
throw 'an exception';
})
.done(function () {
console.log('ok');
})
;
} catch (e) {
console.log(e);
}
我希望代码能够捕获异常并将“异常”记录到控制台。相反,我以未捕获的异常结束。
有谁知道在这种情况下如何处理异常?
最佳答案
不,你不能那样做。这不是异常处理与 promise 的工作方式。
done
子句中的代码不会在与 try/catch 相同的时间或上下文中执行。您不能在浏览器中异步捕获这样的异常(目前!)。
我的建议是将 .fail
子句当作陷阱。
jQuery.ajax('http://www.someurlthatwillproduceanerror.com')
.fail(function () {
console.log("an exception"); // the handler here!
})
.done(function () {
console.log('ok');
});
请注意,基于异常执行某些操作的代码不必与声明 promise 的代码位于同一位置。
var p = jQuery.ajax('http://www.someurlthatwillproduceanerror.com');
...
...
p.fail(function(){ /* I'm handling it here */}); // .catch in modern promise libs
一般来说,从处理 promise 的函数返回 promise 可能是个好主意——这通常会产生更清晰的代码。
关于javascript - jQuery 延迟 : throw and catch an exception in the fail() callback,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20092738/