javascript - jQuery 延迟 : throw and catch an exception in the fail() callback

标签 javascript jquery promise

我正在尝试发出 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/

相关文章:

javascript - 使用 Promise 构造函数将值发送回服务器

JavaScript 匿名函数 : how is this variable exposed in global namespace

javascript - 调用对象中设置的匿名函数,未得到预期结果

javascript - 如何使用异步 I/O 将实时数据集写入磁盘?

javascript - 页面内容显示在菜单栏上?

javascript - Kendo UI 网格, Uncaught Error : Invalid Template

javascript - 返回值和从函数返回 Promise.resolve() 之间的区别

javascript - 如何在Axios中使用React设置多部分?

javascript - document.getElementById ('myframe' ).readyState 在 IE 11 中为 "undefined"

javascript - 为 MVC 和 AngularJS 启用 CORS