Я вижу, что ошибка авторизации. Я раз 500 все проверил
Поочередное выполнение функций
-
- Каждый раз вызывая асинхронную функцию вы должны делать это через _call. Например
_call(test,null)!- Если нужно передать в нее аргументы - передавайте их вторым параметром.
_call(test, 1)!
или
_call(test, function(){log("test")})!
Чтобы получить аргументы используйте функцию
_arguments()Используя эти 2 правила я переписал код таким образом
test1 = function () { sleep(200)! log('1'); }; test2 = function () { sleep(200)! log('2'); }; test3 = function () { sleep(200)! log('3'); }; test4 = function () { sleep(2000)! log('4'); }; test = function () { _CALLBACK_TEST = _arguments(); _call(test1, null)! _call(test2, null)! _call(test3, null)! _call(test4, null)! _call(_CALLBACK_TEST,null)! }; t = function () { _call(test, function(){log('callback')} )! } main = function () { t()! }; _call(main,null)! log("end")Теперь вызов функции main разботает в цикле, с условиями и где угодно.
-
@support Спасибо за хорошие и подробные ответы во всех моих темах, теперь почти весь мой код работает) Но есть еще вопрос, как получить результат выполнения асинхронной функции? Будет ли работать _result(), если совершить return из такой функции? И будут ли работать блоки try\catch с асинхронными функциями?
-
как получить результат выполнения асинхронной функции? Будет ли работать _result(), если совершить return из такой функции
Нужно использовать функцию _set_result(), вот пример кода
function test() { sleep(1000)! _set_result("test") } _call(test,null)! log(_result())try\catch будет работать только с синхронным кодом, для асинхронного можно использовать функцию _on_fail вот пример
function FunctionWhichAlwaysFail() { load("ldkjfgsldgkdg.com")! } //try _call(function() { //catch _on_fail(function(){ log("Ошибка : " + _result()) _break() }) _call(FunctionWhichAlwaysFail,null)! log("Это никогда не будет выведено") },null)! log("конец") -
@blackhacker , @support как нужно изменить этот код
var j = 1; mark1: while(true){ log("Итерация: " + j) for(var i=0; i<VAR_LIST_ACCS.length; i++){ var tmpArr = VAR_LIST_ACCS[i][14].split("#"); var cntUploads = parseInt(tmpArr[0]); var scheduleUploads = JSON.parse(tmpArr[1]); if( cntUploads != scheduleUploads.length-1 && Date.now() + timeZones[VAR_LIST_ACCS[i][5].split("#")[0]] >= scheduleUploads[cntUploads] ) { VAR_LIST_ACCS[i][14] = cntUploads + 1 + "#" + JSON.stringify(scheduleUploads); log("найден: " + VAR_LIST_ACCS[i][4]); break mark1; } sleep(500)! } j++; sleep(15000)! }в этом цикле идет проверка дат, по условию, когда нужный момент времени/даты наступил выходим из цикла.
У меня проблема сsleep()!паузы не работают, БАС подвисает на этом цикле. Точнее БАС то работает, но интерфейс не отвечает, как выполнить паузы в тех местах цикла? -
@support кстати, вопрос по "теме будет".
Пробую вызвать:

Где

Получаю ошибку:

Что я делаю не так? Если вызывать код, внутри getNewBotData(), без самой функции getNewBotData, все работает замечательно.
Однако когда все это оборачиваю в функцию getNewBotData и пытаюсь ее вызвать через _call, умирает :(
-
j = 1; _do(function () { log("Итерация: " + j); _do(function () { VAR_CYCLE_INDEX = _iterator() - 1; if (VAR_CYCLE_INDEX > VAR_LIST_ACCS.length - 1) { _break(); } var tmpArr = VAR_LIST_ACCS[VAR_CYCLE_INDEX][14].split("#"); var cntUploads = parseInt(tmpArr[0]); var scheduleUploads = JSON.parse(tmpArr[1]); if (cntUploads != scheduleUploads.length - 1 && Date.now() + timeZones[VAR_LIST_ACCS[VAR_CYCLE_INDEX][5].split("#")[0]] >= scheduleUploads[cntUploads]) { VAR_LIST_ACCS[VAR_CYCLE_INDEX][14] = cntUploads + 1 + "#" + JSON.stringify(scheduleUploads); log("найден: " + VAR_LIST_ACCS[VAR_CYCLE_INDEX][4]); _break(2); } sleep(500)! })! j++; sleep(15000)! })! -
@blackhacker said in Поочередное выполнение функций:
erato
спасибо!
на счет break, то там по идее должен сработать такой:_break(2); -
@out Если внутри используются асинхронные функции, то if нужно заменять на _if, for и while на _do
Я бы сделал так.
_do(function () { log("Итерация: " + _iterator()); _do(function () { if (_iterator() > 3) { _break(); } var r = rand(1,100) log(r) if(r>95) { log("найдено"); _break(2); } })! sleep(500)! })! -
@blackhacker Извините, случайно отредактировал ваш пост. Частично восстановил.