Библиотека JavaScript для синхронизации событий - PullRequest
4 голосов
/ 14 декабря 2011

скажем, я делаю 3 вызова ajax и хочу дождаться окончания 3 вызовов, прежде чем что-то делать.

Существует ли библиотека для синхронизации нескольких асинхронных событий в JavaScript? (используя или нет систему событий jQuery)

Ex:.

var sync = new syncLib();
$('a1').click(sync.newListener());
$('a2').click(sync.newListener());

sync.wait(function(e1, e2) {
  // fired when both a1 and a2 are clicked or when 10 seconds have passed
  // e1 and e2 would have properties to know whether or not they timed out or not..
}, 10 /* timeout */));

Я нашел это: https://github.com/Ovea/js-sync/blob/master/README.md,, но таймауты не поддерживаются. (Допустим, второй вызов ajax занимает слишком много времени, я не хочу, чтобы моя синхронизация зависала, я хочу установить тайм-аут 10 секунд)

Я знаю, что могу сам что-то кодировать, но я просто проверяю здесь (после поиска в Google)

Спасибо!

EDIT: С тех пор я нашел async: https://github.com/caolan/async

Ответы [ 4 ]

11 голосов
/ 14 декабря 2011
$.when($.ajax("/"), $.ajax("/"), $.ajax("/")).then(function () {
    alert("all 3 requests complete");
});

Документация

3 голосов
/ 14 декабря 2011

вы можете использовать jquery отложенный объект

вот полезный пост http://www.erichynds.com/jquery/using-deferreds-in-jquery/

1 голос
/ 28 августа 2012

Здесь у вас есть [библиотека] [1] на основе jQuery, созданная для этой цели.

В простых случаях использования $.when() - ЛУЧШИЙ, но jcon-q-rency позволяет синхронизировать любые фрагменты асинхронного кода.

http://www.megiddo.ch/jcon-q-rency

1 голос
/ 14 декабря 2011

Решение .deferred, .when, .then, упомянутое в других ответах, намного элегантнее, но также можно написать собственное простое решение, чтобы вы могли увидеть, как это можно сделать вручную.Вы просто устанавливаете счетчик для количества вызовов ajax, которые у вас есть в полете, и в обработчике успеха для каждого вызова ajax вы уменьшаете счетчик и запускаете свое действие, когда счетчик достигает нуля.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...