Показать сообщение отдельно
  #1 (permalink)  
Старый 09.04.2012, 21:46
Новичок на форуме
Отправить личное сообщение для lexeo Посмотреть профиль Найти все сообщения от lexeo
 
Регистрация: 09.04.2012
Сообщений: 2

jQuery deferred chain tasks
Добрый вечер, уважаемые форумчане.
В ходе написания скрипта для определенной задачи я наткнулся на сложность. Нужна помощь.
Итак, работаю с jQuery.Deferred

Задача - несколько независимых очередей ajax-запросов с задержкой.
Подробнее:
- есть $.Deferred объект, реализующий очередь ajax запросов с определенными параметрами. По отдельности такие "цепочки" работают отлично.
- необходимо запустить выполнение нескольких таких deferred-объектов в цикле, но с задержкой. Т.е. первый запускается сразу, остальные через N-секунд.
- "проблема" в том, что выполнение всех запросов асинхронно и отсчет задержки нужно начинать после завершения работы первой очереди.

function test () {
    var df = $.Deferred();
/* ... выполняется цепочка ajax-запросов, после завершения которых вызывается df.resolve();*/

    return df.promise();
};

var obj = test();

//для примера
obj.done(function() {
//do something
});


А теперь нужно реализовать запуск этих объектов один за другим НО с определенной задержкой.
Количество "звеньев" этой цепочки зависит от кол-ва элементов массива Array. При каждом выполнении выбирается первый элемент последством Array.shift();

*ниже приведен НЕ работающий код, который собственно и нужно заменить рабочим
Что-то типа такого.

$.when(test()).done(function() {
    var callback = this.done;
    if(array.length > 0) {
        setTimeout(function() {
            $.when(test()).done(callback);
        }, 5000);
    } else {
        //end
    }
});


p.s. я слаб в JS, если что-то не так сильно не ругайте. Буду рад подсказкам и наставлениям на правильный путь.

Заранее всем спасибо
Ответить с цитированием