如何覆盖jQuery promise回调

我创建了一个方便的方法,为我的ajax调用添加了一个默认的error handling程序:

function myAjaxFunction(url, data) { return $.ajax({ url: url, data: data }).fail(myErrorHandler); } 

到目前为止,这很好用,因为现在我不必在50个不同的地方指定error handling函数。

但有时我需要使用自定义error handling程序覆盖默认error handling程序。 但是,当我这样做时,它会调用两个error handling程序:

 myAjaxFunction("myurl", "mydata").fail(myCustomErrorHandler).then(doSomething); 

如何让它覆盖或删除链中的先前error handling程序?

如何从链中删除以前的error handling程序?

你不能。

或覆盖它?

你可以撤消它的作用(覆盖它的效果)。 但是,您最好避免添加常规处理程序 – 为此,您必须更改便捷方法。 我建议将自定义处理程序作为可选参数:

 function myAjaxFunction(url, data, customHandler) { return $.ajax({ url: url, data: data }).fail(customHandler || myErrorHandler); }