postech
@postech
программист

Результаты promise валятся в кучу, как исправить?

Добрый день.

Делаю живой поиск: по мере ввода текста в строку поиска выдаются результаты из базы.
Проблема: в выдачу попадают не только результаты по итоговому слову, но и иногда вместе с ними - результаты частично введенного слова (например, при вводе слова "шуруповерт" в выдаче могут оказаться результаты по "шуруп" и "шуруповерт" в одной каше).

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

Упрощенный код функции:
function live_search_js() {
    let text = document.forms.form__on_page_search.search.value;                // значение текста в строке поиска
    let search_results = document.getElementById('search_results');             // div с результатами выдачи

    if(text != '') {
        search_title.innerHTML = 'Результаты для <i>"' + text + '"</i>';

        let url = "https://apiurl.ru/method"

        query = {
            title: text
        }

        let options = {
            method: 'POST',
            headers: {
                'Accept': 'application/json',
                'Content-Type': 'application/json;charset=utf-8'
            },
            body: JSON.stringify(query)
        }
    
        let response = fetch(url, options)
            .then(response => response.json())
            .then(result => {
                search_results.innerHTML = '';
                result.forEach(function(item, index) {
                    search_results.innerHTML += item
                })
            });
    }
}


Вызов функции при вводе:

$('#form__on_page_search').on('input', function() {
            clearTimeout(timer);
            timer = setTimeout(function() {
                live_search_js();
            }, 200);
        });
  • Вопрос задан
  • 165 просмотров
Пригласить эксперта
Ответы на вопрос 1
ProgrammerForever
@ProgrammerForever
Учитель, автоэлектрик, программист, музыкант
Добавьте параметр порядковый (номер запроса, timestamp, и т.п.) или определяйте по косвенным признакам (например - длина запроса, хотя при удалении текста будет коллизия). И если уже был обработан запрос N, то все запросы с меньшим порядковым номером - игнорируются как неактуальные
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы