В моей скрипке я следующая функцией, которая называется подтягивать (для имитации пользователя, начиная его три раза в быстрой последовательности)функция очереди не вызывает
https://jsfiddle.net/tvs1zdw9/1/
function test(){
var r = $.Deferred();
//simulate ajax call that loads data and takes 2 seconds
setTimeout(function(){
r.resolve();
count++;
$('#here>i').html(count);
},2000);
return r;
}
Цель: Независимо от того, как быстро пользователь продолжает нажимать кнопку, я всегда хочу дождаться завершения функции до ее повторного запуска.
Я уже добавил deferrer (г), что дает указание на, когда функция выполняется с помощью следующего кода:
test().done(function(){
console.log('done running function');
});
Пример:
- пользователь нажимает кнопку нажимает 3 раза быстрая последовательность
- Функция называется три раза (быстрее, чем она может быть завершена)
- Существует «Queu е», который создается
- Следующий пункт в„очереди“пинают всякий раз, когда функция завершается, а не до
Я нашел функциональность очереди JQuery, но кажется, что это только для функций прикованных к элементам в DOM ... возможно, я не понимаю его полностью. Здесь: https://api.jquery.com/queue/
Может ли кто-нибудь помочь мне создать очередь, а затем пройти через нее после завершения каждой функции?
Все они, если я запустить функцию 3 раза она должна работать в три раза, но синхронным. Поэтому он должен ждать, пока предыдущее время не пройдет через – DavidDunham
, спасибо Аруну, но это просто «отключает» функцию до ее завершения. Я хочу, чтобы там была очередь – DavidDunham
Почему бы не использовать .queue(), но прикрепить его к событию .click() на пустом div? Затем вы помещаете свою функцию внутри .click() и запускаете ее, как показано в JQuery API. – Cruiser