Поочередное выполнение функций
-
@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 Извините, случайно отредактировал ваш пост. Частично восстановил.
-
@support да ничего, все равно у меня неправильно было с _if. Хотел переделать раньше, но забыл. хотя там в if асинхронного кода нет вроде.