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

Moved Поддержка
  • В общем, я использовал подход из "кастыльно-ориентированного программирования", сделав include из readFile + eval.

    Хотелось бы узнать еще "способы" или как минимум узнать, как и куда добавлять папку с файлами, которая при компиляции "останется" и как к этой папке обращаться локально?

    Хочу мол: LOCAL_PATH + '/my_folder/scripts/'

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

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

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

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

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

  • @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? очень хочу!

  • @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

  • @UlybnisJe

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

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

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

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

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

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

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