Поочередное выполнение функций



  • @support Спасибо за хорошие и подробные ответы во всех моих темах, теперь почти весь мой код работает) Но есть еще вопрос, как получить результат выполнения асинхронной функции? Будет ли работать _result(), если совершить return из такой функции? И будут ли работать блоки try\catch с асинхронными функциями?


  • administrators

    @blackhacker

    как получить результат выполнения асинхронной функции? Будет ли работать _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 кстати, вопрос по "теме будет".

    Пробую вызвать:
    alt text

    Где alt text

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

    Что я делаю не так? Если вызывать код, внутри 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);


  • administrators

    @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)!
            })!
    

  • administrators

    @blackhacker Извините, случайно отредактировал ваш пост. Частично восстановил.



  • @support да ничего, все равно у меня неправильно было с _if. Хотел переделать раньше, но забыл. хотя там в if асинхронного кода нет вроде.


Log in to reply
 

Looks like your connection to Bablosoft was lost, please wait while we try to reconnect.