|
|
|
Подскажите паттерн по отложенному запуску функции?
|
|||
|---|---|---|---|
|
#18+
Периодически происходят аякс-запросы и в колбек-функции каждого должна выполняться функция allgood(), но она должна запуститься только когда нет незавершенных запросов. Т.е. должна помещаться в какую-то очередь и выполниться сразу же как появится окно (все ответы будут получены, а новых запросов еще не отправлено). Есть ли какие-нибудь паттерны или готовые решения на этот счет? Может быть такая ситуация имеет свое название? Есть ли в jQuery есть какой-нибудь счетчик ожидающих аякс-запросов, который можно было бы проанализировать? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2012, 01:05 |
|
||
|
Подскажите паттерн по отложенному запуску функции?
|
|||
|---|---|---|---|
|
#18+
Debouncing? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2012, 01:13 |
|
||
|
Подскажите паттерн по отложенному запуску функции?
|
|||
|---|---|---|---|
|
#18+
Что-то подсказывает мне, что дешевле, эффективней и правильней это сделать на стороне сервера. Даже есть термин такой - MQ (Message Queue) и специализированные продукты. Причем, эти продукты позволяют в автоматическом режиме складывать сообщения в базе, на случай если подписчик отключится или должен получать сообщения отложенно. Возможно, в рамках твоего проекта это слишком сложно, но отвечаю на прямо поставленный вопрос относительно готового решения. Продукты - WebSphereMQ (C, Java, .NET, Perl, Python, SOAP), RabbitMQ (Java, .NET), ActiveMQ (Java) и т.д. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2012, 01:54 |
|
||
|
Подскажите паттерн по отложенному запуску функции?
|
|||
|---|---|---|---|
|
#18+
Shitbox2Есть ли в jQuery есть какой-нибудь счетчик ожидающих аякс-запросов, который можно было бы проанализировать?есть глобальные каллбэки, в которых можно упаковать логику http://api.jquery.com/category/ajax/global-ajax-event-handlers/ ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2012, 02:30 |
|
||
|
Подскажите паттерн по отложенному запуску функции?
|
|||
|---|---|---|---|
|
#18+
авторDebouncingНе то, но спасибо за наводку! Отличный плагин, пригодится в другом месте. Из-за 20 строчек даже жалко файл подключать, проще код скопипастить. авторЧто-то подсказывает мне, что дешевле, эффективней и правильней это сделать на стороне сервераВот не знаю... Посылать на сервер лишние запросы как-то не правильно. В моем случае нужно сохранять порядок расположения элементов, но делать это стоит только если есть уверенность, что в это время никакой элемент не будет удален или создан. Поэтому самое простое (как посоветовали), запихнуть функцию в Код: javascript 1. Хотя лучше использовать Код: javascript 1. 2. 3. Только не могу понять как узнать, что среди завершенных были нужные мне функции... Еще есть вариант использовать $.when( deferred1, deferred2,… ), но опять же не знаю как в качестве deferred1, deferred2,… получить ссылки из нужных аякс-запросов (пихать deferred1, deferred2,… в их success-функции так же не хочется) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2012, 08:45 |
|
||
|
Подскажите паттерн по отложенному запуску функции?
|
|||
|---|---|---|---|
|
#18+
Shitbox2, А что вам мешает завести глобальную пременную равную нулю и тупо при запуске любого аякса ее плюс плюсить, при калбеке минус минусить. Если она равна нулю запускайте свою функцию. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2012, 11:39 |
|
||
|
Подскажите паттерн по отложенному запуску функции?
|
|||
|---|---|---|---|
|
#18+
Мешает желание не использовать промежуточные переменные, т.к. они, будучи в глобальной... или просто достаточно обширной области, затрудняют понимание программы. Это для меня показатель такой, чем меньше срок жизни у переменных, тем лучше код (в нашем случае, она живет бесконечно). ИМХО, конечно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2012, 11:51 |
|
||
|
Подскажите паттерн по отложенному запуску функции?
|
|||
|---|---|---|---|
|
#18+
Shitbox2, Окей, тогда пишите фабрику аякс запросов, которая будет в курсе, если вас синглтон не устраивает. Суть та же, плюс лишний класс (читать как лишняя память), зато вы ей ограничите область видимости. ЗЫ. Я не понимаю этого повального увлечения замыкать все в одной функции, если вы пишете для браузера и не используете специальных инструментов, то это не более чем модный приемчик. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2012, 12:04 |
|
||
|
Подскажите паттерн по отложенному запуску функции?
|
|||
|---|---|---|---|
|
#18+
mage.lan, 1. получаете свой аякс 2. проверяете наличие очереди, если есть, добавляете в очередь, если нет, вызываете свою функцию 3. на выходе из вашей функции вызываете следующий элемент очереди ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2012, 12:21 |
|
||
|
Подскажите паттерн по отложенному запуску функции?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2012, 12:22 |
|
||
|
Подскажите паттерн по отложенному запуску функции?
|
|||
|---|---|---|---|
|
#18+
Shitbox2Мешает желание не использовать промежуточные переменные, т.к. они, будучи в глобальной... или просто достаточно обширной области, затрудняют понимание программы. Это для меня показатель такой, чем меньше срок жизни у переменных, тем лучше код (в нашем случае, она живет бесконечно). ИМХО, конечно.Т.е. использовать одну (пусть и глобальную) переменную - плохо, а навертеть чего-то - хорошо... Однако... :) Ну, коли мы такие продвинутые - то, почему бы не упаковать эту (и другие общие) переменные в объект, обозвав его, например Global ? Или не применить модульность? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.12.2012, 15:10 |
|
||
|
Подскажите паттерн по отложенному запуску функции?
|
|||
|---|---|---|---|
|
#18+
авторэто не более чем модный приемчик.авторТ.е. использовать одну (пусть и глобальную) переменную - плохо, а навертеть чего-то - хорошо... Не надо буквально воспринимать) Если не найду способа лучше, придется, конечно, использовать промежуточную переменную, что будет лучшим решением. Но обычно всегда удается обойтись без этого... Сейчас мне насоветуют всего, начну экспериментировать и определю оптимальный вариант. Пока хотелось бы узнать, как в $.when( deferred1, deferred2,… ) записать нужные аякс-функции, если бы это можно было легко сделать, то решение образовалось бы само собой. queue() изучаю, но пока плохо представляю как применить... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2012, 01:06 |
|
||
|
Подскажите паттерн по отложенному запуску функции?
|
|||
|---|---|---|---|
|
#18+
Shitbox2Пока хотелось бы узнать, как в $.when( deferred1, deferred2,… ) записать нужные аякс-функции, если бы это можно было легко сделать, то решение образовалось бы само собой.Что значит как? Метод jQuery ajax() возвращает объект deferred, его и передавайте в when. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2012, 12:34 |
|
||
|
Подскажите паттерн по отложенному запуску функции?
|
|||
|---|---|---|---|
|
#18+
авторЧто значит как? Метод jQuery ajax() возвращает объект deferred, его и передавайте в when.Не верно спросил... У меня в разных местах возникают аякс запросы. Код: javascript 1. 2. 3. Причем, они периодически повторяются и deferred1, deferred2 будут принимать значения все новых и новых объектов запросов Допустим, после каждого запроса записываю в $.when полученный объект. Если этот же запрос вызвать немедленно еще раз, то значение в $.when перезапишется и deferred1 от старого незавершенного запроса будет потерян и $.when никак не определит ситуацию когда старый запрос выполняется дольше нового Можно присваивать рандомные имена, но тогда в $.when скопится куча мусора отработавших запросов... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2012, 20:19 |
|
||
|
Подскажите паттерн по отложенному запуску функции?
|
|||
|---|---|---|---|
|
#18+
Shitbox2, Заведите флаги, и опрашивайте их до тех пор, пока не будут все установлены. Пару строчек кода и никакого жКвери. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.12.2012, 22:46 |
|
||
|
Подскажите паттерн по отложенному запуску функции?
|
|||
|---|---|---|---|
|
#18+
Все перепробовал и как всегда победил способ, годящийся только для конкретной задачи. Практически то же, что способ с флагом. По логике моей программы создается js-объект, его данные отправляются на сервер, ему возвращается и сохраняется в нем айдишник. Функция же, заинтересованная, в том, чтобы объект был 100% сохранен на сервере, как раз перебирает все js-объекты. Поэтому осталось вставить в ее цикл условие проверки существования айдишника + удалять айдишник перед отправкой запроса в функции удаления. На все понадобилось две строчки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 16:33 |
|
||
|
Подскажите паттерн по отложенному запуску функции?
|
|||
|---|---|---|---|
|
#18+
Бррр. Генерировать событие не лучше-ли решение? Или так: Код: javascript 1. 2. 3. Или тогда уж состояние объекту добавить: отправлен на сервер, принят и обработан сервером, отказано в обработке ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 16:55 |
|
||
|
Подскажите паттерн по отложенному запуску функции?
|
|||
|---|---|---|---|
|
#18+
Слишком много кода получалось. Это нужно было по деффереру добавить в ф-ии добавления/удаления и сохранять с сылки в новом параметре js-объекта, потом при окончании еще 2 строчки генерации события. Потом отдельно перебирать объекты и записывать ссылки в $.when, которая потом должна была бы вызывать нужную функцию, которая опять должна была перебирать объекты... Минимум 10 строчек кода + создание новых сущностей + использование новых ф-й (пока в коде нигде не задействовал дефферер). Овчинка выделки не стоит ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.12.2012, 22:27 |
|
||
|
|

start [/forum/topic.php?fid=22&msg=38094179&tid=1448921]: |
0ms |
get settings: |
7ms |
get forum list: |
19ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
53ms |
get topic data: |
11ms |
get forum data: |
3ms |
get page messages: |
75ms |
get tp. blocked users: |
2ms |
| others: | 198ms |
| total: | 374ms |

| 0 / 0 |
