alexbaum
@alexbaum
JS-разработчик, наставник.

Правильное написание асинхронного приложения?

Задача:

Зарегистрировать выполнение всех запросов, объединенных общей целью. Выполнить код по завершению всех запросов.


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

ajax_request и another_ajax_request могут вызываться в произвольных частях кода, многоэтажка из коллбеков строго не рекомендуется.

Мой код:

jsfiddle.net/alexbaumgertner/72dcK

ApplicationDeferreds = {

    deferreds: [],

    done: function(callback) {
        jQuery.when.apply(null, this.deferreds).done(callback);
    },
    register: function(deferred) {
        var self = this;

        // delete resolved
        jQuery.each(this.deferreds, function(index, value) {
            if (value.state() == 'resolved') {
                self.deferreds.splice(self.deferreds.indexOf(value), 1);
            }
        });

        this.deferreds.push(deferred);
    }
};

function ajax_request() {
    ApplicationDeferreds.register(jQuery.get('/'));
}
function another_ajax_request() {
    ApplicationDeferreds.register(jQuery.get('/'));
}

ajax_request();
another_ajax_request();

ApplicationDeferreds.done(function() {
    // do someone
    $('#result').html('done!');
});
  • Вопрос задан
  • 2987 просмотров
Решения вопроса 1
Litiy
@Litiy
Возможно стоит воспользоваться backbone.js/knockout.js. У них очень неплохо продумана работа с событиями и асинхронными запросами. Код становится понятнее и красивее. Если вы без предубеждений к фреймворкам (backbone отлично работает с другими библиотеками и никак с ними не конфликтует, весит 4 килобайта и не нагружает страницу, по опыту — супер).
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
deadkrolik
@deadkrolik
taliban
@taliban
php программист
Я бы сделал так:
ajax_request(callback1);
ajax_request(callback2);
Хотя это очень зависит от задач, есть такие в которых нужна последовательность.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы