Os diferidos do jQuery podem ser cancelados?

Eu tenho uma situação onde eu quero cancelar um diferido. O diferido está associado a uma chamada ajax.

Por que estou usando deferreds

Eu não uso os objetos xhr normais retornados por $ .ajax. Estou usando jsonp, o que significa que não posso usar códigos de status HTTP para tratamento de erros e tenho que incorporá-los nas respostas. Os códigos são então examinados e um objeto adiado associado é marcado como resolvido ou rejeitado de acordo. Eu tenho uma função de API personalizada que faz isso por mim.

function api(options) {
  var url = settings('api') + options.url;
  var deferred = $.Deferred(function(){
    this.done(options.success);
    this.fail(options.error);
  });
  $.ajax({
    'url': url,
    'dataType':'jsonp',
    'data': (options.noAuth == true) ? options.data : $.extend(true, getAPICredentials(), options.data)
  }).success(function(jsonReturn){
    // Success
    if(hasStatus(jsonReturn, 'code', 200)) {
      deferred.resolveWith(this, [jsonReturn]);
    } 
    // Failure
    else {
      deferred.rejectWith(this, [jsonReturn]);
    }
  });

  return deferred;
}
Por que eu quero cancelar o diferido

Existe um campo de entrada que serve como um filtro para uma lista e atualizará automaticamente a lista meio segundo após a digitação terminar. Como é possível que duas chamadas ajax sejam excelentes por vez, preciso cancelar a chamada anterior para garantir que ela não retorne após a segunda e mostre os dados antigos.

Soluções que não gostoEu não quero rejeitar o diferido porque isso vai demitir manipuladores ligados com.fail().Eu não posso ignorá-lo porque ele será automaticamente marcado como resolvido ou rejeitado quando o ajax retornar.A exclusão do adiado causará um erro quando a chamada ajax retornar e tentar marcar o adiado como resolvido ou rejeitado.O que devo fazer?

Existe uma maneira de cancelar o diferido ou remover os manipuladores conectados?

Conselhos sobre como consertar meu design são bem-vindos, mas será dada preferência a encontrar uma maneira de remover manipuladores ou impedi-los de disparar.

questionAnswers(4)

yourAnswerToTheQuestion