我可以强制jQuery Deferred / Ajax在解决后执行失败处理程序吗?

一个例子,以明确我想做什么。 这就是我通常会做的事情:

function success(data, status, jqxhr){ if ( data.error ) return failure(jqxhr, status, data.error); // process data } function failure(jqxhr, status, err){ ... } $.ajax( ... ) .done(success) .fail(failure) 

有什么办法,我可以用匿名函数来完成这个,就像这样吗?

  $.ajax( ... ) .done(function(data, status, jqxhr){ if(data.error) // what do i need to do here to jump in to the fail handler? }) .fail(function(jqxhr, status, err){ ... }) 

我需要做什么才能跳转到失败处理程序?

不要使用done ,而是映射promise的结果。 通过返回被拒绝的promise,您可以“抛出”错误并拒绝生成的promise,以便执行失败处理程序。

 $.ajax(…) .then(function(data, status, jqxhr){ if (data.error) return $.Deferred().reject(data.error); else return data; // if you want to return multiple arguments, you'd use // $.Deferred().resolve(data, status, jqxhr); }) .done(function(data) { … }) .fail(function(jqxhr, status, err){ … });