Как элегантно повесить проверку на все действия сразу?
-
Допустим, есть большой скрипт, во время работы, в абсолютно любом месте может выскочить попап который мне нужно обработать, как это сделать самым классным образом, подскажите у кого есть такой лайфхак?
Кратко - мне нужно повесить функцию которая будет срабатывать после каждого действия.
Хелп.
-
@centerdevs said in Как элегантно повесить проверку на все действия сразу?:
Допустим, есть большой скрипт, во время работы, в абсолютно любом месте может выскочить попап который мне нужно обработать, как это сделать самым классным образом, подскажите у кого есть такой лайфхак?
Кратко - мне нужно повесить функцию которая будет срабатывать после каждого действия.
Хелп.
Если вы обрабатываете это окно в BAS, то и проверять наличие необходимого элемента нужно в BAS. Асинхронно (то есть фоном) этого сделать не получится, придётся добавлять проверку наличия "попап" окна во все возможные места. Проще всего проверку наличия окна и работу с этим окном поместить в функцию и в ваш алгоритм просто добавлять вызов этой функции.
Если логика работы с этим окном будет произведена в js браузера, то проще всего циклом проверять наличие этого элемента на экране, ну или более сложный вариант - следить за мутациями
-
@Fox понимаю, потому ищу лайфхак какой-то, допустим у меня скрипт состоит из 400 действий, это может быть загрузка урл, клик мышью, скролл перемещение и так далее, если мне добавить проверку на 400 действий это добавит ооочень много лишних условий, проверок, меток для возврата. А если бы просто после каждого действия проверял не появился ли этот попап - то было бы просто и эффективно. Без кучи ненужной мусорной логики в коде
-
@centerdevs said in Как элегантно повесить проверку на все действия сразу?:
@Fox понимаю, потому ищу лайфхак какой-то, допустим у меня скрипт состоит из 400 действий, это может быть загрузка урл, клик мышью, скролл перемещение и так далее, если мне добавить проверку на 400 действий это добавит ооочень много лишних условий, проверок, меток для возврата. А если бы просто после каждого действия проверял не появился ли этот попап - то было бы просто и эффективно. Без кучи ненужной мусорной логики в коде
Единственная функция, которая запускается в BAS после каждого действия, это функция _sa(), но она синхронная.
Основная проблема в том, что вы хотите обрабатывать появление этого окна функцией BAS, а большинство действий в BAS - асинхронные (код которых заканчивается на восклицательный знак). Даже действие "вызов функции" является асинхронным. Соответственно поместить асинхронный вызов в синхронную функцию не получится (BAS просто не будет дожидаться завершения выполнения функции).По этому простых решений здесь нет.
-
@Fox понял ) но странно, ведь по сути в бас вшита синхронная работа , когда каждое действие идёт по очереди, я понимаю что под капотом эти действия асинхронны, но раз БАС дожидается завершения одной и переходит к следующей, может есть какой-то вариант впихнуться вот в этот момент 😄
-
@centerdevs said in Как элегантно повесить проверку на все действия сразу?:
@Fox понял ) но странно, ведь по сути в бас вшита синхронная работа , когда каждое действие идёт по очереди, я понимаю что под капотом эти действия асинхронны, но раз БАС дожидается завершения одной и переходит к следующей, может есть какой-то вариант впихнуться вот в этот момент 😄
так.. давайте ещё раз.. прочитайте медленно, внятно и с выражением: "Нет, так сделать не получится. Никак. Совсем. Вообще."
Синхронно или асинхронно, это скорее названия логики выполнения действий BAS (будет ждать интерпретатор завершения действия или пойдёт сразу дальше)
@support said in Подключение Js файлов к общему scope не нарушая зависимости и не ломая сам проект.:
Восклицательный знак в конце асинхронных функций - это небольшое расширение языка призванное избежать callback hell.
Например, такой код
sleep(1000)! log("Done")
Будет преобразован в такой
sleep(1000, function(){ log("Done") })
Если вызвать post("myurl",{})
То функция вернется мгновенно не дожидаясь окончания запроса.
-
@Fox Понял, жалко, но спасибо большое за разъяснение.