Вызов асинхронной функции



  • Хочу делать гет запрос из js, но проблема в том, что код продолжает выполняться не дожидаясь ответа пробовал вот так

    function http_get(){
     http_client_get2('https://...../,{method:("GET"),headers:("")})!
     };
      _call(http_get,null)!
    

    Пробовал через await, но ругается, что нет такой переменной, наверное можно через node, но не хочется.



  • @Denis_krsk
    Достаточно этого

     http_client_get2('https://...../',
          {
           method:("GET"),
           headers:("")
           }
    )!
    VAR_SAVED_CONTENT = http_client_content()
    


  • @DrPrime Я с самого начала так и сделал, но дело в том, что код js который идет после запроса выполняется не дожидаясь результат запроса. Может это связанно с этим что он у меня в цикл выполняется? Попробовал без цикла и все ок.



  • @DrPrime Вот пример

        for (i=0;i<3;i++){
                   http_client_get2('https://ya.ru',{method:("GET"),headers:("")})!
                   SAVED_CONTENT= http_client_encoded_content("auto");
                   log(i)
        }
        log('Конец цикла')
    

    Тупо после запроса переходит на следующую итерацию, а то что ниже в цикле пропускает.
    В этот примере счетчик i ни разу не выводит в лог. А делает 3 запроса, а потом выводит "Конец цикла"



  • Все разобрался не знал, что с асинхронными функциями нельзя использовать обычный if и циклы for, while. for заменил на _do и все как надо работает

     _do(function () {
    if (_iterator() > 3) {
        _break();
    }
    http_client_get2('https://ya.ru',{method:("GET"),headers:("")})!
    SAVED_CONTENT= http_client_encoded_content("auto");
    log(_iterator())
    })!
    log('Конец цикла');


  • Еще столкнулся с одной бедой. Переменные которые до циклов определяю. Например
    var test='10'; В циклах потом не видны ReferenceError: Can't find variable.



  • @Denis_krsk переменная должна выглядеть так VAR_TEST



  • @bigorat Такая то да работает, а если возможность js переменные использовать?
    Просто переменные больше нигде использоваться не будут, а скрипт и так огромный с множеством переменных и не хочется без необходимости их плодить.



  • @Denis_krsk насколько знаю js переменные не видны в интерфейсе, поэтому и ошибку бъет...



  • @bigorat Дак я не в интерфейсе я в выполнить код работаю. Просто использую вместе с js методы БАС



  • @Denis_krsk а..., ты об этом, тут я хз, поскольку в js не силен особо :)



  • @bigorat Да тут даже не в знание JS дело, а наверное в устройстве БАС :)



  • @Denis_krsk возможно, точно утверждать не берусь :)



  • @Denis_krsk
    Объявление с var - это локальная переменная. У нее ограниченая область видимости.
    Объявляйте просто без var. Ну и по неписанным правилам програмированния глобальные переменные всегда пишутся в верхнем регистре.
    Пример

    TEST = 'Текст'
    //В другом блоке выполнить код
    log(TEST)
    


  • @DrPrime Читал, что как раз наоборот var задает глобальную переменную, а локальную создает let. И что в JS большими буквами принято называть константы.
    А в новом стандарте JS (при использовании директивы 'use strict') var обязательно.
    Но все таки решил попробовать и
    не работает TEST = 'Текст', только так VAR_TEST = 'Текст'. Видимо одному @support известно как тут можно поступить :)



  • @Denis_krsk в лог не выводится? Или вы пытаетесь увидеть ее в диспетчере?



  • @DrPrime Ан нет помогло, просто в одном месте старая осталась. Теперь вообще не понимаю по каким законам код работает :)



  • Видимо не по JS ^)



  • @Denis_krsk
    https://learn.javascript.ru/function-basics

    Обьявляя с var - они видны только в рамках одной функции, тоесть в выполнить код.
    В следующем блоке они будут не видны.
    В бас используется интерпретатор js от qt, который еще впроде не поддерживает новые стандарты с фишками с типом данных в переменных и т.д.



  • @DrPrime Спасибо теперь полная ясность. Можно полноценно в выполнить код работать, а то в кубиках нечитаемо получается из-за объема.


Log in to reply