Я нашел следующий фрагмент кода JavaScript (может быть, здесь, в Stack Overflow?) Для реализации тайм-аута:
var delay = (function() {
var timer = 0;
return function(callback, ms) {
clearTimeout(timer);
timer = setTimeout(callback, ms);
};
})();
Я новичок в JavaScript, поэтому я все еще пытаюсь обернуть голову вокруг замыканий. Если я вызываю delay(firstCallback, 200)
в одном месте, а затем delay(secondCallback, 200)
сразу после этого, первый обратный вызов тайм-аута очищается, а второй обратный вызов выполняется успешно.
Как мне повторно использовать delay
в разных случаях, не перезаписывая другие? (Не уверен, что эти термины верны, но, надеюсь, это поможет мне понять.) Итак, в приведенном выше примере я хочу, чтобы оба обратных вызова выполнялись.
Спасибо за вашу помощь!
РЕДАКТИРОВАТЬ: В качестве практического примера я пытаюсь буферизовать события нажатия клавиш в поле ввода, чтобы обратный вызов выполнялся только после того, как ни одна клавиша не была нажата в течение 200 мс. Но у меня есть несколько полей ввода, и в настоящее время буфер разрушается, когда два поля ввода имеют события нажатия клавиши в быстрой последовательности.