Как правильно в "Выполнить код" добавить ожидание?



  • Не очень хорошо понимаю асинхронные действия в BAS поэтому вопрос:
    Как сделать правильно ожидание в несколько секунд внутри вействия выполнить код?



  • @mix said in Как правильно в "Выполнить код" добавить ожидание?:

    Не очень хорошо понимаю асинхронные действия в BAS поэтому вопрос:
    Как сделать правильно ожидание в несколько секунд внутри вействия выполнить код?

    Если без условий или функций, то:

    sleep(1000)!
    

    если с условием:

    _if(true, function(){
        sleep(5000)!
    })!
    

    Только смысл?



  • @fox Смысл очень простой. Написал код, само действие "выполнить код" помещено в басовскую функцию "while". Код в зависимости от пришедшего json'a либо запускает while по следующему элементу (блок if), либо запускает while по этому же элементу (блок else), либо продолжает выполнять дальше код (там где многоточия). Потом возникло желание добавить секунд 5-10 ожидание в блок else. И что-то я все равно не пойму как в логике BAS это реализовать?

    if (typeof [[RUN_PARAMS]]["data"] != "undefined") {
        if (typeof [[RUN_PARAMS]]["data"]["redirectModule"] != "undefined" &&
            typeof [[RUN_PARAMS]]["data"]["redirectModule"]["code"] != "undefined") {
            if ([[RUN_PARAMS]]["data"]["redirectModule"]["code"] == 'NOT_FOUND') {
                if ([[NOT_FOUND_COUNT]] == 1) {
                    [[LIST]][12][ [[IND_ITEM]] ] = 0;
                    [[IND_ITEM]] = [[IND_ITEM]] + 1;
                    [[CYCLE_INDEX_MAIN]] = [[CYCLE_INDEX_MAIN]] + 1;
                    [[NOT_FOUND_COUNT]] = 0;
                    _next("function");
                } else {
                    [[NOT_FOUND_COUNT]] = 1;
                    // Добавить ожидание
                    _next("function");
                }
            }
        }
    ...
    ...
    ...
    ...
    }


  • @mix Ожидание - sleep это асинхронная функция и ее нельзя использовать в обычных if, for, while. Смотрите на примере того как БАС генерирует код скрипта или на форуме поищите. В бас вместо циклов for while - _do(function(){...})! А вместо if - _if(условие, function(){...})! или _if_else(условие, function(){...}, function(){...})!



  • @usertrue Т.е. это все if'ы (все 4 штуки из примера выше) нужно заменить на _if(true, function(){. И только потом туда можно будет sleep(5000)! вставить. Я правильно сделал или еще что-то нужно?

    _if(typeof [[RUN_PARAMS]]["data"] != "undefined", function(){
        _if(typeof [[RUN_PARAMS]]["data"]["redirectModule"] != "undefined" &&
            typeof [[RUN_PARAMS]]["data"]["redirectModule"]["code"] != "undefined", function(){
            _if([[RUN_PARAMS]]["data"]["redirectModule"]["code"] == 'NOT_FOUND', function(){
                _if_else([[NOT_FOUND_COUNT]] == 1, function(){
                    [[LIST]][12][ [[IND_ITEM]] ] = 0;
                    [[IND_ITEM]] = [[IND_ITEM]] + 1;
                    [[CYCLE_INDEX_MAIN]] = [[CYCLE_INDEX_MAIN]] + 1;
                    [[NOT_FOUND_COUNT]] = 0;
                    _next("function");
                },{
                    [[NOT_FOUND_COUNT]] = 1;
                    sleep(5000)!;
                    _next("function");
                }
            }
        }
    ...
    ...
    ...
    ...
    }
    


  • @mix Код не полный, но в целом суть уловили вроде )



  • @usertrue Смотрите, если вместо многоточий в коде, внутри первого _if у меня дальше идет также много условий, циклов, но уже без асинхронных действий... Мне их тоже нужно на басовские менять или можно оставить обычные if, for, while? Т.е. вот так можно оставить:

    _if(typeof [[RUN_PARAMS]]["data"] != "undefined", function(){
        _if(typeof [[RUN_PARAMS]]["data"]["redirectModule"] != "undefined" &&
            typeof [[RUN_PARAMS]]["data"]["redirectModule"]["code"] != "undefined", function(){
            _if([[RUN_PARAMS]]["data"]["redirectModule"]["code"] == 'NOT_FOUND', function(){
                _if_else([[NOT_FOUND_COUNT]] == 1, function(){
                    [[LIST]][12][ [[IND_ITEM]] ] = 0;
                    [[IND_ITEM]] = [[IND_ITEM]] + 1;
                    [[CYCLE_INDEX_MAIN]] = [[CYCLE_INDEX_MAIN]] + 1;
                    [[NOT_FOUND_COUNT]] = 0;
                    _next("function");
                },{
                    [[NOT_FOUND_COUNT]] = 1;
                    sleep(5000)!
                    _next("function");
                }
            }
        }
    
        if (typeof [[RUN_PARAMS]]["data"]["redirectModule"] != "undefined" &&
            typeof [[RUN_PARAMS]]["data"]["redirectModule"]["code"] != "undefined") {
            if ([[RUN_PARAMS]]["data"]["redirectModule"]["code"] == 'NOT_FOUND') {
                for(...)
                while(...)
                ...
            }
        }
    }
    


  • @mix Можно обычные.


Log in to reply
 

  • 28
  • 2
  • 6
  • 2
  • 14
  • 4
  • 10
  • 5