Есть ли способ прервать асинхронный асинхронный?

StackOverflow https://stackoverflow.com/questions/3411746

  •  26-09-2019
  •  | 
  •  

Вопрос

У меня есть поисковая страница, результаты которых отображаются в SlickGrid. Это поиск Ajax, который выполняет onkeyup, так что это возможно для выполнения поиска, экземпляр Slick.Grid's render быть вызванным, и у другого результата вернутся до первого асинхронного render завершает. Я хотел бы отменить начальный render Как только вторая ajax запрос возвращается, чтобы не два render звонки, происходящие одновременно.

Редактировать с примером:

Вот что я делаю, с alerts на месте для отслеживания заказа исполнения.

function setupGrid() {
    slickDataView = new Slick.Data.DataView();
    slickGrid = new Slick.Grid(slickGridDiv, slickDataView.rows, slickGridColumns, slickGridOptions);
    slickDataView.onRowsChanged.subscribe(function(rows) {
      slickGrid.removeRows(rows);
      slickGrid.updateRowCount();
      slickGrid.render();
    });
    slickDataView.onRowCountChanged.subscribe(function(args) {
      slickGrid.updateRowCount();
      slickGrid.render();
    });
} 

function performSearch() {   
    jQuery.get('searchPage.php', {MODEL_ID: userInputField.val()},
      function(results) {
        slickDataView.beginUpdate();
        alert(1);
        slickDataView.setItems(results);
        alert(2);
        slickDataView.endUpdate();
      }
    );
}

setupGrid();
userInputField.keyup(function() { performSearch(); });

В этой последовательности я получаю следующие оповещения, когда я вводит два номера в userInputField Текстовое поле в быстрой последовательности:

1
1
2
Это было полезно?

Решение

На вашей странице должно быть что-то еще. Приведенный вами пример невозможен - выполнение JavaScript никогда не прерывается событием. Событие только что входит в очередь и подхвачена циклом события после выполнения текущего кода. То, что вы увидите в своем примере, это 1212.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top