Универсальное решение по обработке ошибок BAS?

Поддержка
  • Вот список функций доступных к обращению, и главный вопрос )) Как организовать ignore error при работе с ними?

    	try {
    		load("googlecom")!
    		log("1 Удачно");
    	}catch (e){
    		log("1 Неудачно");
    	}
    
    	try {
    		load("http://google.com/")!
    		log("2 Удачно");
    	}catch (e){
    		log("2 Неудачно");
    	}
    

    Вот так получилось игнорировать ошибку и продолжать выполнение кода, но блок catch не срабатывает при этом.

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

  • @centerdevs said in Универсальное решение по обработке ошибок BAS?:

    Вот так получилось игнорировать ошибку и продолжать выполнение кода, но блок catch не срабатывает при этом.

    Этот код неверный, у БАС не все так просто, действия с ! в конце являются асинхронными. Я не буду объяснять как все это работает потому что это плохой путь и не рекомендуется разработчиком БАС.

  • @UserTrue странно, но эту асинхронность сгенерил сам BAS, на скриншоте выше там оригинал того что я экспортировал в модуль.

    Так и планирую оборачивать группами которые взаимосвязаны, просто я уже +- нашел все методы для работы через Код, и для организации такой работы мне ведь и в коде нужно как-то игнорировать ошибки и их обрабатывать ) потому стало интересно как это делают собраться, кто работает с БАС через код )

  • @centerdevs said in Универсальное решение по обработке ошибок BAS?:

    странно, но эту асинхронность сгенерил сам BAS, на скриншоте выше там оригинал того что я экспортировал в модуль.

    Посмотрите внимательный, там где сгенерировал сам БАС нет try/catch у БАС свое api для работы с асинхронностью

  • @UserTrue да, это моя неудачная попытка словить ошибку )

            _call(function(){
        
                _on_fail(function(){
        
                    VAR_LAST_ERROR = _result()
                    VAR_ERROR_ID = ScriptWorker.GetCurrentAction()
        
                    log(VAR_ERROR_ID+' '+VAR_LAST_ERROR);
    
                })
    
                load("googlecom")!
                log("1 Удачно");
        
    
            }, null)!
        
    
            _call(function(){
        
                _on_fail(function(){
        
                    VAR_LAST_ERROR = _result()
                    VAR_ERROR_ID = ScriptWorker.GetCurrentAction()
        
                    log(VAR_ERROR_ID+' '+VAR_LAST_ERROR)
        
                })
        
    
                load("http://google.com/")!
                log("2 Удачно");
    
            }, null)!
       
    

    Вот таким образом получилось на данный момент ловить ошибку и продолжать работу дальше. Интересно можно ли будет как-то использовать этот _on_fail глобально.

  • @centerdevs нуу. ты можешь использовать лютейший костыль в виде eval. а вообще есть try catch

  • @centerdevs Я повторюсь БАС не заточен для работы через API, вы в итоге потратите кучу времени на танцы с бубном и понимание странных багов, которые скорей всего будут! Лучше учиться строить логику скрипта в соответствии с возможностями БАС

  • @centerdevs said in Универсальное решение по обработке ошибок BAS?:

    Добрый день, прошу совета опытных ребят, поделитесь самым рабочим паттерном по работе с ошибками и исключениями.

    Имеем - проект на 20 функций, в каждой 10-20 действий.

    Вопрос - как можно, красиво и универсально обрабатывать ошибки?

    Это мой первый проект, потому на данный момент, исходя из примеров и документации, для себя вижу пока что одно решение "в лоб":

    • каждое действие оборачивать в блок "Игнор ошибок" где при ошибке делаем "Скриншот" + отправка мне в телеграмм извещения ( или сервер, не суть ), с указанием места где произошла ошибка в коде, или простое игнорирование.

    Получается нужно два типа реагирования на ошибки:

    1. когда точно знаю что элемент на странице обязан быть, а его нет, таким образом можно предположить что веб-ресурс поменял вёрстку, мы пропускаем функцию или совсем стопаем проект, зависит от условий в разных местах.

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

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

    Чего хотелось бы - не изобретать велосипед, а сразу сделать правильно. Поделитесь опытом друзья)

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

    b8acd560-798a-4c23-95c7-baed28ca0b8f-изображение.png

    каждое действие оборачивать в блок "Игнор ошибок" где при ошибке делаем "Скриншот" + отправка мне в телеграмм извещения ( или сервер, не суть ), с указанием места где произошла ошибка в коде, или простое игнорирование.

    Вы можете обернуть в игнор ошибок вызов функции, в таком случае действие "Игнорировать Ошибки" применится ко всем действиям в вызванной функции:

    ae213880-a394-4d83-a278-5d9de6faf0d9-изображение.png

    12663630-5bec-4234-978d-e3a441fe5485-изображение.png

    4eda0c3d-f48d-43db-b5d6-790616371189-изображение.png


    А на счёт использования api BAS в действии "выполнить код", приведу скриншот ответа @support :

    823f89d0-730c-4c22-868d-c9c5b1da5011-изображение.png

  • @Fox Воспользуюсь моментом. @Fox а защиту с нодой исправили? ато я чота этот момент пропустил. И в поиске нет ответа.

  • @f0cus said in Универсальное решение по обработке ошибок BAS?:

    @Fox Воспользуюсь моментом. @Fox а защиту с нодой исправили? ато я чота этот момент пропустил. И в поиске нет ответа.

    Ты про код из действия node js в открытом виде? Быстрее было проверить, чем спрашивать :). С шифровкой кода для ноды были какие то серьёзные трудности, какие именно не помню (не нашёл сходу ответ @support).
    Я прятал важные участки кода в переменные BAS и выполнял в ноде через eval()

  • @Fox Да. Спасибо, лан допишу проверю.

  • Всё понял друзья, большое спасибо за внимание и помощь)

    "Остановить поток если элемент не найден" даже не подумал глянуть про такую опцию)

    Буду делать дальше тогда в том виде в котором есть, и понемногу копать про nodejs.