Подключение Js файлов к общему scope не нарушая зависимости и не ломая сам проект.



  • Все же в кастыльно ориентированном подходе нашелся серьезный изьян :(

    Некоторые функции баса вызываются(для меня очень странно) с восклицательным знаком в конце...

    Для js, это считается синтаксическая ошибка при вызове eval, а функции баса без него не работают...

    0_1478376160199_ыыыБезымянный рисунок.png

    Как быть, что можно сделать, что бы "заработало"?


  • administrators

    @UlybnisJe Добавлять код в движок можно создавая модули. В манифесте нужно указать список файлов

    https://github.com/bablosoft/BAS/blob/master/Modules/ReCaptcha2/js/manifest.json#L29

    Сами файл или файлы содержат js код, который добавляется к общему scope.

    https://github.com/bablosoft/BAS/blob/master/Modules/ReCaptcha2/js/engine.js

    page().script("script.js")!

    Добавляет код не в движок, а в браузер.

    Восклицательный знак в конце асинхронных функций - это небольшое расширение языка призванное избежать callback hell.

    Например, такой код

    sleep(1000)!
    log("Done")
    

    Будет преобразован в такой

    sleep(1000, function(){
       log("Done")
    })
    

    Если вызвать post("myurl",{})

    То функция вернется мгновенно не дожидаясь окончания запроса.



  • @support Блин, я честно уже малость устал...

    Подскажи пожалуйста, как я могу сделать пост запрос из кода с использованием обычных js callback'ов?

    Например в методе http_client_post_no_redirect, последний параметр это callback
    http_client_post_no_redirect(myResource, params, {"content-type":("urlencode"), "encoding":("UTF-8"), "method":("POST")}, function()
    {
    log('asdas');
    });

    Но как бы я его не описывал, хоть замыканием, хоть просто указывал название функции аля: myCallback

    Ничего корректно не работало, коллбек не вызывался без "!".
    А если использовал "!", тогда callback отработал, но сразу весь скрипт и завершил свою работу(весь, в смысле абсолютно весь скрипт завершил свою работу, хоть и должен был продолжить свою работу для следующий действий)

    Есть ли способ сделать post запрос без "!", стандартными средствами js? очень хочу!




  • administrators

    @UlybnisJe

    Вот пример кода

    http_client_post(
       "google.com", 
       ["a","b"], 
       {"content-type":("urlencode"), "encoding":("UTF-8"), "method":("POST")},
       function(){
         log("Request done")
         sleep(1000,function(){
             log("Sleep done")          
             log("result length " + http_client_content().length)
         })
    
    })
    

    Выполнить пост запрос.
    Подождать секунду.
    Вывести длину ответа.

    Вот проект
    0_1478703792889_post.xml



  • @support ммм, а вы запускали сами этот "проект"?

    Я запустил и увидел тоже, что и с моими "потугами", а именно
    [18:22:22] Поток №1 : Поток выполнен успешно с сообщением "Ok"
    [18:22:22] Скрипт завершен корректно

    Никаких логов, никаких ответов от сервера...



  • @support я сейчас использую post запросы считай через стандартное "выполнить код" + "!". Там где надо сделать post, делаю типо

    app.currentTask.beforePost();//тут устанавливается url+params в обьекте bas.post на основе данных текущего обьекта

    _call(bas.post.run, null)! // затем просто вызываю пост, который определен в блоке "выполнить код" в начале проекта

    log(bas.post.result);

    где bas = global this


  • administrators

    @UlybnisJe

    ммм, а вы запускали сами этот "проект"?

    Конечно запускал. Я каждый проект запускаю перед тем, как опубликовать на форуме.

    Никаких логов, никаких ответов от сервера...

    Работает через "запуск". Запись проекта без ! не работает.



  • @support ах вот в чем "магия", в записи не работает без "!"...

    Спасибо, даже не догадывался о подобном


  • administrators

    @UlybnisJe Да, там к основному коду нужно добавить код начала новой секции. Когда последняя инструкция находится внутри, ее сложно найти.


Log in to reply
 

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