Параллелизм - сохраняет ли обработчик jquery очередь? - PullRequest
0 голосов
/ 29 февраля 2012

У меня есть этот простой код :

<a href="#" id="link1">Link1</a>
<a href="#" id="link2">Link2</a>​

$('#link1').click(function () {
    alert("First");
});

$('#link2').click(function () {
    alert("Second");    
});    
​

в «удаленной» возможности, когда пользователь нажимает на ссылку 1 (сначала), а затем на ссылку 2, с разницей 0,000000001 мс (я знаю, это невозможно в реальности, но это просто знать), возможно ли, что предупреждение # link2 начнется раньше, чем предупреждение # link1?

И если да, то каково решениезаблокировать обработчик # link2 до тех пор, пока действие # link1 не завершится?

1 Ответ

3 голосов
/ 29 февраля 2012

"... возможно ли, чтобы предупреждение #link2 начиналось раньше, чем предупреждение #link1?"

Нет. Если клики действительно происходят в этом порядке, события будут срабатывать в этом порядке.

JavaScript является однопоточным, а системы событий синхронными . Это гарантирует, что синхронная часть первого клика должна завершиться до того, как будет разрешено событие второго клика.

Если в обработчик для первого щелчка введен асинхронный код, то первый щелчок все равно будет начинаться первым, но второй щелчок может начаться, если он произойдет до асинхронного первого щелчка 1020 * код работает.


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

var l1 = $('#link1');
var l2 = $('#link2');

l1.click();  // this alert will always come first
l2.click();
...