@Inwnew Реально заработало))) Спасибо вам большое. Здоровья, удачи, денег, любящей жены, мирного неба над головой :)
Как правильно создавать и вызывать функции через блоки Выполнить код?
-
Разобрался: надо
_function_return()использовать -
@agility said in Как правильно создавать и вызывать функции через блоки Выполнить код?:
Например, в первом блоке у меня так:
myfunc = function() { _if (1, function() { ... })! return true; // _return(true); - этот вариант тоже не работает }Второй блок если сделать так, то после вызова ф-ции код прерывается, то есть log() не выполняется:
var res = myfunc(); log('...')А если так, то
resвсегдаnull, хотя должен true:_call_function(myfunc,{})! var res = _result_function()Тестовый скрипт: 0_1568630416526_test_cutomfunc.xml
Объявляете функции со всеми действиями
get_ip = function () { _switch_http_client_main() http_client_get2("https://fingerprints.bablosoft.com/ip", { method: ("GET"), headers: ("") })! VAR_SAVED_CONTENT = http_client_encoded_content("auto") log(VAR_SAVED_CONTENT) } query_result = function () { VAR_NEW_LIST = [] load("https://www.google.com/search?q=site:https://community.bablosoft.com%20%D0%BB%D0%B0%D0%B9%D1%84%D1%85%D0%B0%D0%BA")! _SELECTOR = " \u003eXPATH\u003e //span[@class=\u0022st\u0022]"; wait_element(_SELECTOR)! get_element_selector(_SELECTOR, true).length()! ELEMENT_LENGTH_109692 = _result() _do(function () { VAR_CYCLE_INDEX = _iterator() - 1 VAR_FOR_EACH_XPATH = " \u003eXPATH\u003e //span[@class=\u0022st\u0022]" if (VAR_CYCLE_INDEX >= ELEMENT_LENGTH_109692) _break(); _SELECTOR = VAR_FOR_EACH_XPATH + "\u003eAT\u003e" + VAR_CYCLE_INDEX; wait_element(_SELECTOR)! get_element_selector(_SELECTOR, false).text()! VAR_SAVED_TEXT = _result() VAR_NEW_LIST.push(VAR_SAVED_TEXT) })! delete ELEMENT_LENGTH_109692 VAR_NEW_LIST.forEach(function (item) { log(item) }); }и вызываете их в любом удобном для вас месте
_if (1, function() { _call(get_ip, null)! })! _if (1, function() { _call(query_result, null)! })!Тестовый скрипт
-
@fox Спасибо.
Мне что-то всё не везет на этот интерпретатор. Ниже работает скрипт бесконечно. В чем ошибка? Если_ifнаifпоменять, то работает верно, но я это не могу сделать, потому что в реальном скрипте сложные многоуровневые условия и там необходимо_ifприменять_do(function() { log('iterator: ' + _iterator()) _if (_iterator() == 3, function() { _break() })! sleep(1000)! })! -
@agility said in Как правильно создавать и вызывать функции через блоки Выполнить код?:
@fox Спасибо.
Мне что-то всё не везет на этот интерпретатор. Ниже работает скрипт бесконечно. В чем ошибка? Если_ifнаifпоменять, то работает верно, но я это не могу сделать, потому что в реальном скрипте сложные многоуровневые условия и там необходимо_ifприменять_do(function() { log('iterator: ' + _iterator()) _if (_iterator() == 3, function() { _break() })! sleep(1000)! })!условие
_ifнеобходимо для асинхронных функций, для прерывание цикла используйте обычныйiffunction qq() { log("qq") } _do(function () { if (_iterator() - 1 > 3) _break(); _if(_iterator() - 1 < 2, function () { _call_function(qq, {})! //_result_function() })! })! -
@agility
_do(function() { log('iterator: ' + _iterator()) _if (_iterator() == 3, function() { _break(2) })! sleep(1000)! })! -
@usertrue работает, спасибо! Работает вижу при
_break >= 2в параметрах. Не знаешь, что2означает, в принципе? Откуда ты так же узнал про этот параметр (что бы на будущее я сам находил)?@fox так смотри, а если у меня вложенность как на скрине в нормальном виде блоками? Такая логика с Выполнением кода в цикле почти у всех может встречаться.

-
@agility 2 это уровень вложенности. В Бас все не такое каким кажется. Изучайте исходники.
-
@usertrue Возможно ли как-нибудь получить текущий ур-нь вложенности в Выполнить код до выполнения
_do()? Например, на скрине ниже ур-нь вложенности в_do()1 или 3 будет верный? Если 1, то понятно как работать, а если 3, то как тогда получить текущий ур-нь программно?
-
@agility Лучше писать на кубиках в таком случае.
-
@agility said in Как правильно создавать и вызывать функции через блоки Выполнить код?:
Например, в первом блоке у меня так:
myfunc = function() { _if (1, function() { ... })! return true; // _return(true); - этот вариант тоже не работает }Второй блок если сделать так, то после вызова ф-ции код прерывается, то есть log() не выполняется:
var res = myfunc(); log('...')А если так, то
resвсегдаnull, хотя должен true:_call_function(myfunc,{})! var res = _result_function()Тестовый скрипт: 0_1568630416526_test_cutomfunc.xml
Продублирую здесь ответ @support
Таких изменений не будет. Писать такой код крайне не рекомендуется. Под "такой" я имею ввиду писать код целиком с использованием внутренних расширений БАС. Это приводило не раз и приведет в вашем случае к ошибкам, которые очень трудно выловить и исправить. Если нужно писать скрипт целиком на js, используйте node.js