使用jQuery Deferred进行错误处理和恢复

时间:2016-02-24 22:37:15

标签: javascript jquery promise jquery-deferred

我正在使用jQuery并且意识到这个问题是因为jQuery.Deferred实现不是Promises / A + compiant。我不想使用任何其他库来解决这个问题。

有了这个,有没有办法从$.Deferred().fail()回调中恢复,以便我回到成功链?这可以通过then()的多回调表单实现,但到目前为止我还没有找到使用.fail()的解决方案

然后:

asyncThatWillFail().then(function () {
    // useless callback
}, function () {
    console.log("error");
    return $.Deferred().resolve();
}).then(function () {
    console.log("continuing on success chain");
});

失败(不起作用):

asyncThatWillFail().fail(function () {
    console.log("error");
    return $.Deferred().resolve();
}).then(function () {
    console.log("continuing on success chain");
});

在我的情况下,我只需要检查失败,设置标志,继续我正在做的事情。我只是不需要“then”示例中的并行成功处理程序。

这是一个jsFiddle,以进一步澄清我的意思。

1 个答案:

答案 0 :(得分:3)

不,你不能使用.fail。但是,您不需要将函数作为.then的第一个参数传递:

  

如果不需要回调那个类型,参数可以是null

由于只有then启用了链接,因此您应该使用

asyncThatWillFail().then(null, function () {
    console.log("error");
    return $.Deferred().resolve();
}).then(function () {
    console.log("continuing on success chain");
});

除了需要返回已履行的jQuery承诺之外,这与ES6 then方法类似,其中catch.then(null, …)的同义词。