События в коллекции/множестве

В моем веб-приложении jQuery я использую события в значительной степени.
У моего компонента для того, чтобы сделать ajax запросы клиента (имя - "коммуникация") к серверу есть очередь.
Эта очередь подобна коллекции Backbone.js.

Так каждый раз, когда я поместил новый объект запроса в коллекцию "коммуникации", объект коммуникации получает "добавить" событие и метод "рабочего" взглядов "коммуникации", если в настоящее время есть продолжающийся запрос. Если нет никого, метод рабочего обрабатывает запрос и наконец, когда все хорошо работает, вызывает "полное" событие на объекте запроса.

В этом компоненте коммуникации только один запрос за один раз возможен. Если я добавляю, что запрос возражает против "коммуникации", и "добавить" событие вызывается, и метод рабочего видит, что уже есть запрос, чем ничего не происходит.

Мой вопрос: В этой ситуации, каков лучший подход для обработки этого необработанного объекта запроса В ОТНОШЕНИИ "ИНФРАСТРУКТУРЫ СОБЫТИЙ"?

До сих пор у меня было 2 разных подхода:

1) Я мог сделать следующее: Если мой продолжающийся запрос закончен, метод рабочего может проверить, есть ли необработанный объект запроса в коллекции, и обработайте его. Это просто, никакое событие не включается.

2) Или что-то другое: Если метод рабочего начинается из-за "добавить" события и видит, что уже есть продолжающийся запрос, я мог осуществить что-то как: "Я не могу ответить, adeqately к этому добавляют событие, я размещаю вас назад. Пожалуйста, вызовите себя в 200 миллисекундах снова, возможно у меня есть время тогда".

Возможно, кто-то уже имел подобную проблему и имел очень хорошее решение этого?

3
@MarcellFü lö p: Это очень хорошо. Почему don' t вы делают ответ?
добавлено автор Wolfgang Adamec, источник

2 ответы

Я думаю, что хороший подход к этой проблеме должен был бы осуществить "следующее" событие, которое запущено в очередь. Каждый раз, когда "полное" событие вызывается, оно должно запустить следующее событие в очередь, которая тогда видела бы, есть ли какие-либо необработанные запросы и раз так выбирают один согласно вашей логике (я принимаю FIFO),

2
добавлено

Если я понимаю, что вы исправляете, вы хотите приковать цепью запросы или другие асинхронные события? Тогда обещания образец - изящное решение.

JQuery уже осуществляет его с Отсроченный объект.

С jQuery 1.8 + формирование цепочки запроса может быть столь же простым как:

$.ajax(...).then(
    function() {
        return $.ajax(...);
    }
).then(
    function() {
        return $.ajax(...);
    }
);

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

Универсальный Пример:

var Queue = function() {
   //start with resolved promise
    var promise = $.Deferred().resolve();

    this.add = function(handler) {
       //chain and replace latest with next promise
        promise = promise.then(function() {
            var deferred = $.Deferred();
            handler(deferred);
            return deferred;
        }).promise();
    }
};

var q = new Queue();
q.add(function(deferred) {
    setTimeout(function() { alert('handler 1'); deferred.resolve(); }, 1000);
});
q.add(function(deferred) {
    setTimeout(function() { alert('handler 2'); deferred.resolve(); }, 1000);
});

Демонстрационный пример JSFiddle

Здесь укладчики получают отсроченный объект как параметр и ответственны твердости (или отклоните), это, если они "сделаны". Другой, более гибкий, возможность был бы то, что укладчики должны создать отсроченный объект собой и возвратить его обещание, этот способ, которым также можно использовать другие обещания как те, которые возвращены $ .ajax

0
добавлено
JavaScript Jobs — чат
JavaScript Jobs — чат
8 336 участник(ов)

JavaScript Jobs — чат для поиска работы и людей Правила оформления: https://teletype.in/@telegram-ru/r1WQe5F1m См. также: @mobile_jobs, @devops_jobs, @nodejs_jobs, @react_js, @angular_ru, @js_ru

JavaScript.ru
JavaScript.ru
7 932 участник(ов)

Сообщество сайта JavaScript.ru в Slack.

pro.js
pro.js
4 675 участник(ов)

Про JavaScript и NodeJS Invite: https://t.me/joinchat/Be4rsT5Rsgq30DHutjxXgA Правила: http://telegra.ph/ru-chat-rules-06-19 Вакансии только с ЗП, не чаще раза в неделю.

JavaScript — русскоговорящее сообщество
JavaScript — русскоговорящее сообщество
3 269 участник(ов)

Рекомендуем сразу отключить уведомления Правила: https://rudevs.network/ByaMH6un7 См. также: @js_noobs_ru, @nodejs_ru, @typescript_ru, @react_js, @electron_ru Вакансии и поиск работы: @javascript_jobs

JavaScript Noobs — сообщество новичков
JavaScript Noobs — сообщество новичков
2 484 участник(ов)

Чат для новичков

javascript_ru
javascript_ru
915 участник(ов)

Сообщество любителей самого популярного языка программирования в мире. Чат основан в 2009 году. Логи: https://goo.gl/9EOeM7 Поддержка бота: @chat_linker (ссылка на репу внутри) Вам будут интересны @frontend_ru и @css_ru

jsChat
jsChat
603 участник(ов)

Чат посвященный программированию на языке javaScript Перед отправкой ссылки на Ваш контент посоветуйтесь с админом Все ссылки удаляются ботом автоматически

JavaScript for Zombies Chat
JavaScript for Zombies Chat
492 участник(ов)

Чат про JavaScript для настоящих zombie! Вход строго по приглашениям! Ссылка для строгих приглашений: https://t.me/joinchat/AAMBHz3Uyr0tuZ7VaB029g

All That JS
All That JS
417 участник(ов)

JS на русском