7885b44a-7266-4c34-b5a4-41ec6ce2ca3b-image.png
или отлов ошибок на сайте нужен?
тогда это выпонять при каждой загрузке и там уже писать скрипт который отловит ошибки при пользовании сайта
Универсальное решение по обработке ошибок BAS?
-
@f0cus said in Универсальное решение по обработке ошибок BAS?:
ecmdscript 8
Вот это я очень важный этап пропустил когда приступил к созданию проекта)) Походу сейчас буду переписывать все свои кубики в код)
Поискал по форуму, не нашел живых примеров организации такой работы, понимаю что каждому удобно по своему.
Но, как в идеале опытным путём организовывать работу через код, как делать отладку?
Какие варианты вижу:
-
Весь проект находится в одном блоке "Выполнить код", в него добавляются вызовы по мере создания проекта. То есть, сначала действие тестируется в отдельном кубике "Выполнить код", а потом уже переносится в общий файл с кодом. Таким образом получим один раздутый "Выполнить код" который будет оперировать всем на свете.
-
Разделить код на некоторые функциональные части, ака Функции на кубиках. То есть мы получим вместо одного файла, допустим 5 файлов "Выполнить код", например Регистрация, Подтверждение, Логин, Парсинг, Постинг. И там уже будет код отвечающий за эти действия.
Каким образом делаете Вы и почему?)
Тут вижу проблему с отладкой, то есть когда я в отдельном кубике отладил действие, и хочу перекинуть его в общий код, то мне в какой-то момент надо отладить общий код)) вдруг там что-то начало мешать друг другу, ну или просто ошибка где-то. Нужно будет как-то отлавливать уже ошибки в общем коде, который большой и который не так удобно контроллировать.
-
-
@centerdevs Сначала? да со временем вы набьете руку и будете вызывать их напрямую без тестирования обращаясь через api. Начните с простого. Перенесите одно действие в выполнить код, посмотрите как работает, второе, и так далее. Вам просто нужно будет поиграть с басом. Понять как он работает. все section_ что то вас не интересуют. только сами действия. Не надо сразу запрашивать из кода через клиента=) или открывать страницу это асинхрон. С ними у вас еще будет возможность 'пообщатся').
Через кубик логирование тоже возможно. log() никаких console.log(). Ну если вы не во встроенном языке в ноде все как в ноде 8.6.0 и она отдельная тема.
upd маленькие var что_то в записи пойдут дальше, в запуске нет. При выполнении всех асинхронов маленькие var обнуляются. Т.е если у вас в коде что то асинхронное и потом будут действия то переносите через [[]] Можете массивы можете объекты можете JSON бас со всем эти прекрасно работает. -
@centerdevs, не стоит писать весь скрипт в "Выполнить код", могут возникнуть проблемы куда серьезней чем "Как обработать ошибки"
-
Большое спасибо за советы друзья)
+- всё понял, но пока что полная картинка не вырисовалась как сделать по людски, возможно кто-то может поделиться неактуальным проектом у которого достаточно большой код и который организован именно на Выполнить код а не на кубиках, это было бы лучшим примером ) Рыскаю по всему форуму, те проекты что выкладывают участники, все на кубиках.
Я так понимаю текущий проект переделывать ради кода нет смысла всё таки. Есть смысл дальше по мере увеличения проекта внедрять именно код а не кубики.
Тогда вопрос по работе с ошибками остается открытым)

Как можно игнорировать все ошибки?) не пропуская при этом следующие действия, чтобы я хотя бы в нужных местах мог поставить исключения, а там где это неважно мог бы просто игнорировать?)
В текущем примере при любой ошибке в Register, дальше дело не пойдет, повторюсь у меня в реальном проекте много действий, если каждое оборачивать в Игнор ошибок, это будет немного неудобно, разве нет простого решения этому?)
-
@centerdevs Лучше игнорировать ошибки устанавливайте не на функции, вы просто не поймете что там было, а на действия. в самих функциях. Т.е найти какой то элемент например или загрузка url и вот его оборачивайте. Что бы это не выглядело в кубиках очень уж страшно у баса есть вот это

Вы же пишете код с нуля и шаблона нет потому каждое можете конечно заморочится и написать модуль с обработкой ошибок установить его и пусть обрабатывает. Но штатно только так. Это не сильно заморочит кубики можно комментировать и можно сворачивать. Как на скрине выше.
-
@f0cus Да, получается придется каждое действие оборачивать в игнор) в котором в случае ошибки можно вызывать функцию которая отправляет мне скриншот и информирует. Пока начну так "в лоб" делать, если приду к какому-нибудь адекватному комплексному решению - поделюсь с сообществом. Большое спасибо Вам за разъяснения и все наводки !)
-
Нашёл интересную штуку, при открытом проекте, можно нажать Менеджер модулей, и создать модуль из текущего проекта, таким образом мы получаем все свои кубики, в виде кода, где каждая функция интерфейсная, становится реальной) и с кодом внутри.
Вот пример тестовый
function Login() { _call(function() { _on_fail(function(){ VAR_LAST_ERROR = _result() VAR_ERROR_ID = ScriptWorker.GetCurrentAction() VAR_WAS_ERROR = false _break(1,true) }) CYCLES.Current().RemoveLabel("function") load("googlecom")! log("Неудачно"); load("http://google.com/")! log("Удачно"); },null)! _if(VAR_WAS_ERROR,function(){ log("Произошла ошибка : " + VAR_LAST_ERROR) })! }Сделал пару тестов методом тыка, при ошибке все ровно обработка дальнейшая прекращается, тут разве что делать какую-то функцию/класс обёртку.
А еще нашел кнопку скрипт, которая показывает код всех кубиков в более реальном как оно показывается в кубиках, с ид-шками итд. По сути тот же код что и выше + указание начала конца кубиков и инфо.
-
-
https://community.bablosoft.com/assets/uploads/files/1476381371015-internalapi.pdf
-
https://raw.githubusercontent.com/bablosoft/BAS/master/Engine/text/apilist.txt
Вот список функций доступных к обращению, и главный вопрос )) Как организовать 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 действий.
Вопрос - как можно, красиво и универсально обрабатывать ошибки?
Это мой первый проект, потому на данный момент, исходя из примеров и документации, для себя вижу пока что одно решение "в лоб":
- каждое действие оборачивать в блок "Игнор ошибок" где при ошибке делаем "Скриншот" + отправка мне в телеграмм извещения ( или сервер, не суть ), с указанием места где произошла ошибка в коде, или простое игнорирование.
Получается нужно два типа реагирования на ошибки:
-
когда точно знаю что элемент на странице обязан быть, а его нет, таким образом можно предположить что веб-ресурс поменял вёрстку, мы пропускаем функцию или совсем стопаем проект, зависит от условий в разных местах.
-
когда элемент не обязательно должен существовать, и нам нужно просто тихо проигнорировать и идти дальше
Проблема - если оборачивать каждое действие в игнор, это очень сильно увеличит общее количество кода ( блоков ), ухудшит общую читаемость, восприятие и тд.
Чего хотелось бы - не изобретать велосипед, а сразу сделать правильно. Поделитесь опытом друзья)
Только вы знаете, какие действия на странице важные, а какие нет. Оберните необходимые действия в игнор ошибок, или отключите опцию "Остановить поток, если элемент не найден"

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



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