我可以强制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){ … });