Можно ли отменить отложенные jQuery?

У меня есть ситуация, когда я хочу отменить отсрочку. Отложенный связан с вызовом ajax.

Why I am using deferreds

Я не использую обычные объекты xhr, возвращаемые $ .ajax. Я использую jsonp, что означает, что я не могу использовать коды состояния HTTP для обработки ошибок и должен встраивать их в ответы. Затем коды проверяются, и соответствующий отложенный объект помечается как разрешенный или отклоненный соответствующим образом. У меня есть пользовательская функция API, которая делает это для меня.

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;
}
Why I want to cancel the deferred

Существует поле ввода, которое служит фильтром для списка и автоматически обновляет список через полсекунды после окончания ввода. Поскольку возможно одновременное выполнение двух вызовов ajax, мне нужно отменить предыдущий вызов, чтобы убедиться, что он не возвращается после второго, и показывать старые данные.

Solutions I don't like I don't want to reject the deferred because that will fire handlers attached with .fail(). I can't ignore it because it will automatically be marked as resolved or rejected when the ajax returns. Deleting the deferred will cause an error when the ajax call returns and tries to mark the deferred as resolved or rejected. What should I do?

Есть ли способ отменить отложенные или удалить любые прикрепленные обработчики?

Советы о том, как исправить мой дизайн, приветствуются, но предпочтение будет отдаваться поиску способов удаления обработчиков или предотвращения их запуска.

Ответы на вопрос(4)

Ваш ответ на вопрос