setTimeout выполнение до завершения

192
16 октября 2018, 23:10

Есть кнопка, при нажатии на которую выполняется функция через setTimeout(f, 250); Но если нажать быстро на кнопку много раз, запуститься одновременно много функций Вопрос: можно ли сделать так, что бы при многкратном нажатии функция не выполнялась до тех пор, пока не закончит выполнение предыдущая функция

Answer 1
var timer = null;
function clickHandler() {
  if (!timer) {
    timer = setTimeout(function() {
      f();
      timer = null;
    }, 250);
  }
}
Answer 2

Да, очередь из функций проще всего сделать цепочкой обещаний:

let lastDeferr, 
count=0 
$('button').click(()=>{ 
  //создаём новое обещание 
  let promise=new $.Deferred(), 
  //устанавливаем функцию-обработчик 
  fn=()=>{ 
    setTimeout(()=>{ 
      console.log('You click button '+(++count)+' times') 
      promise.resolve() 
    },1000) 
    return promise 
  } 
  //создаём новую цепочку или продолжаем уже имеющуюся 
  lastDeferr?lastDeferr.then(fn):fn() 
  //запоминаем последнее звено цепочки обещаний 
  lastDeferr=promise 
})
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<button>This is button</button>

READ ALSO
Порядковый номер строки в sql запросе

Порядковый номер строки в sql запросе

Подскажите есть ли в sql команда вернет порядковый номер нужной строки из всего запроса?

156
Get information about loop in mysql

Get information about loop in mysql

How can I perform loop for data in mysql?

169
Почему не работает lxml.html.cssselect?

Почему не работает lxml.html.cssselect?

Почему cssselect невыполняет поиск элементов?

324