должен ли я добавить функцию прокси
@dilolo Нет, прокси должен приклеиться из профиля. Но лучше проверять.
@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 :

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