Как правильно создавать и вызывать функции через блоки Выполнить код?
-
Например, в первом блоке у меня так:
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
-
Разобрался: надо
_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
необходимо для асинхронных функций, для прерывание цикла используйте обычныйif
function qq() { log("qq") } _do(function () { if (_iterator() - 1 > 3) _break(); _if(_iterator() - 1 < 2, function () { _call_function(qq, {})! //_result_function() })! })!
-
_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