Как элегантно повесить проверку на все действия сразу?



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

    Кратко - мне нужно повесить функцию которая будет срабатывать после каждого действия.

    Хелп.



  • @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 Понял, жалко, но спасибо большое за разъяснение.


Log in to reply