Скрипт выдает результаты поиска при вводе символов с интервалом 350 мс. При каждом срабатывании поиска очищаются предыдущие результаты. Но иногда результаты дублируются, как будто интервал сбрасывается до выполнения функции от предыдущего срабатывания, так же как и стираются результаты.
$("#search").find("[name=search]").on("keyup", function (e) {
clearTimeout($(this).data('timer')),
$(this).data('timer', setTimeout(function(){
let t = e.target.value;
o = '<div class="c-search-results__list">',
liveSearch(t).then((e) => {
$('.c-search-results').html('');
e.products.forEach((p, s) => {
/* ...................................... */
}),
e.products.length ? ($(".c-search-results").html('').addClass("active"), $(o).appendTo($(".c-search-results"))) : $(".c-search-results").removeClass("active");
o += '</div>';
}).catch((e) => {
$(".c-search-results").removeClass("active");
});
$(this).removeData('timer');
}, 350));
});