我正在使用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,以进一步澄清我的意思。
答案 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, …)
的同义词。