Несколько get-запросов в одном коде



  • В коде никак не могу прописать сразу несколько запросов через http-клиент одновременно. Беда с этими асинхронными функциями...

    Скрипт будет однопоточный, так что функционал таков, что делать запросы можно, однако ж всё равно проходит только первый. Второй выполняется и скрипт вылетает. Что в одном блоке кода, что если разнести по разным блокам.

    Мои действия:
    Вызов первый:

    switch_http_client_main()
    http_client_get2('https://vk.com/select_ajax.php?act=a_get_countries',{method:("GET"),headers:("")})!
    VAR_SAVED_CONTENT = http_client_encoded_content("auto")
    

    Вызов второй чуть ниже:

    _switch_http_client_main()
    http_client_get2('https://vk.com/select_ajax.php?act=a_get_cities&country='+country+'&str=$$$***',{method:("GET"),headers:("")})!
    var content = http_client_encoded_content("auto")
    

    После второго вызова приходит правильный ответ, что видно по анализатору http-траффика, но весь скрипт падает, никакие отладки не помогают - скрипт крашится ещё до того, как успеваю глянуть в [[LAST_ERROR]].

    Пробовал оборачивать асинхронные действия в конструкцию типа

    _if(true, function(){
       _call(Вызов http и get-запрос)!
    })!
    

    Но такая конструкция не верна, так как ничего не возвращает.

    Куда копать? Кому удалось запустить в исходном коде запросы?



  • @pragmatik эм, у меня все работает. "country" сам добавил и сначала одно загрузилось, потом второе.

    0_1549833699819_2019-02-11_002127.png



  • @pragmatik

    _if(true, function(){
         http_client_get2(....)!
    })!
    


  • @uraabk да, переписал код, и у меня заработало. Оказывается, проблема была не в вызовах, а совсем в другой части кода. Ругался на то, что я делаю вызво в цикле с условием if:

    var country_search = asf.res("country")
    if (country_search == "Search by cityes"){
    _if(true, function(){
        _switch_http_client_main()
        http_client_get2('https://vk.com/select_ajax.php?act=a_get_cities&country='+country_id+'&str=$$$***',{method:("GET"),headers:("")})!
        VAR_CITYES = http_client_encoded_content("auto")
    })!
    }
    

    Вытащил вызов за пределы цикла - вуаля, всё работает.

    Кто-нибудь знает почему так?



  • @pragmatik Я Вам даже скажу, что и этот Ваш код неверный

    да, переписал код, и у меня заработало. Оказывается, проблема была не в вызовах, а совсем в другой части кода. Ругался на то, что я делаю вызво в цикле с условием if:

    var country_search = asf.res("country")
    if (country_search == "Search by cityes"){
    _if(true, function(){
        _switch_http_client_main()
        http_client_get2('https://vk.com/select_ajax.php?act=a_get_cities&country='+country_id+'&str=$$$***',{method:("GET"),headers:("")})!
        VAR_CITYES = http_client_encoded_content("auto")
    })!
    }
    

    Вытащил вызов за пределы цикла - вуаля, всё работает.

    Кто-нибудь знает почему так?

    в простом if нельзя вызывать асинхронную функцию БАС



  • @usertrue да, я как раз и првёл пример неверного кода. А почему так?



  • @pragmatik Проще наверное ответить "потому что" ))) Просто даже если писать на чистом js, то результат будет такой же, чтобы работать с асинхронными вызовами там и существуют калбеки, промисы, генераторы и наконец await/async. В бас же реализован свой api с которым и надо работать, тк этого его внутренние функции и использовать с ними например промисы не получится.


Log in to reply
 

  • 1
  • 9
  • 2
  • 7
  • 15
  • 4
  • 4
  • 3