Не работает вызов функции



  • Подскажите пожалуйста почему не работает вызов функции ?

    В кубике "выполнить код" есть функция

    function findPrefixData(){
        ...
    	код
        ...
        return результат
    }
    

    Далее в скрипте идут вложенные "While" + "Foreach" (кубиками), и во вложенном "Foreach" есть вызов:

    var [[FIND_TYPE]] = findPrefixData()
    

    который при запуске выдает ошибку:

    Поток завершился с сообщением "ReferenceError: Can't find variable: findPrefixData во время выполнения действия 608256136"
    

    При записи все отрабатывает нормально.



  • @_User_ said in Не работает вызов функции:

    Подскажите пожалуйста почему не работает вызов функции ?

    В кубике "выполнить код" есть функция

    function findPrefixData(){
        ...
    	код
        ...
        return результат
    }
    

    Далее в скрипте идут вложенные "While" + "Foreach" (кубиками), и во вложенном "Foreach" есть вызов:

    var [[FIND_TYPE]] = findPrefixData()
    

    который при запуске выдает ошибку:

    Поток завершился с сообщением "ReferenceError: Can't find variable: findPrefixData во время выполнения действия 608256136"
    

    При записи все отрабатывает нормально.

    findPrefixData = function (){...
    


  • @Fox
    Спасибо все заработало.
    Но породило новые вопросы: почему мой вариант работал до того как пришлось задействовать глобальную переменную ? (с данной функцией она не взаимодействует)
    И почему еще одно такое же объявление другой функции продолжает работать до сих пор ? (отличие лишь в том что в ней передается 1 параметр)



  • @_User_ said in Не работает вызов функции:

    @Fox
    Спасибо все заработало.
    Но породило новые вопросы: почему мой вариант работал до того как пришлось задействовать глобальную переменную ? (с данной функцией она не взаимодействует)

    Смотря что вы подразумеваете под названием "глобальная переменная"

    И почему еще одно такое же объявление другой функции продолжает работать до сих пор ? (отличие лишь в том что в ней передается 1 параметр)

    Скорее всего вы её объявляете в созданной функции BAS



  • @Fox said in Не работает вызов функции:

    Смотря что вы подразумеваете под названием "глобальная переменная"

    Имено то что можно объявить кубиком "Установить глобальную переменную" в БАС

    @_User_ said in Не работает вызов функции:

    (с данной функцией она не взаимодействует)

    Я технически не могу засунуть кубик "Установить глобальную переменную" внутрь кубика "выполнить код" где у меня и объявлена данная функция.
    Вот меня и озадачило такое поведение: данная функция работать в исходном виде перестала, а вторая аналогичная до сих про продолжает стабильно работать.



  • Сразу не до конца понял

    @Fox said in Не работает вызов функции:

    Скорее всего вы её объявляете в созданной функции BAS

    ситуация такая: глобальная переменная обявлена в тойже функции BAS, где находится кубик "выполнить код" с объявленной функцией, но я пробовал переносить объявление в другую функцию BAS, объединял её объявление с JS кодом той функции, что продолжает работать (объявлял несколько функций в одном "выполнить код") и прочие комбинации (объявление раньше вызова, позже, вместе в разных функциях, менял местами первый вызов (объявление глобальной переменной) и кубик с кодом JS).
    Это ни чего не меняет. При запуске или при сборке в модуль (это делается как модуль) вылетает одна и таже ошибка.



  • @_User_ said in Не работает вызов функции:

    Сразу не до конца понял

    @Fox said in Не работает вызов функции:

    Скорее всего вы её объявляете в созданной функции BAS

    ситуация такая: глобальная переменная обявлена в тойже функции BAS, где находится кубик "выполнить код" с объявленной функцией, но я пробовал переносить объявление в другую функцию BAS, объединял её объявление с JS кодом той функции, что продолжает работать (объявлял несколько функций в одном "выполнить код") и прочие комбинации (объявление раньше вызова, позже, вместе в разных функциях, менял местами первый вызов (объявление глобальной переменной) и кубик с кодом JS).
    Это ни чего не меняет. При запуске или при сборке в модуль (это делается как модуль) вылетает одна и таже ошибка.

    Ни чего не понял.. Приложите тестовый скрипт



  • @Fox
    Он в стадии "активного редактирования" :D, и то что есть не дописано, но уже прилично по объему, так что из него "нопонятностей" будет только еще больше.
    попробую выложить эту кашу поэтапно:

    • Пишу модуль с 3мя функциями - 1 рабочая функция, 2 рабочая функция (похожая на первую, но со своей спецификой и вводными параметрами), 3 функция настройки (содержит общие для первых двух данные и настройки) (будет 3 кубика в интерфейсе БАС)
    • Поскольку 1 и 2 функции содержат часть одинаковых данных и все их данные обрабатываются по одному алгоритму, то эти общие куски собрал в функции на JS (код на МНОГО короче сам по себе, а в БАС вообще оформляется как несколько кубиков с функциями внутри)
    • На этапе написания все шло норм, а вот при сборке в модуль переменные (их чесно дохрена) любой из 3х функции (будущих кубиков) стали недоступны в других функциях - пришлось ввести глобальную переменную (передает объект состоящий из этих переменных) для обмена данными.
    • При добавлении этой глобальной переменной, одна из JS функций перестала вызываться в том виде как была объявлена изначально.

    Все функции объявленные на JS, вызываются также кодом JS (это не менялось изначально).
    Переменные для передачи собираются в объект который передается в глобальной переменной (при получении обратный процесс).
    Код функции которая перестала работать пытался перемещать в другие функции (из тех 3х рабочих), переносил в кубики "выполнить код" к тем что работают - безрезультатно. В таком виде перестала работать только эта функция.

    P.S. Все переменные передаются верно - отслеживал добавлением контрольных точек с выводом в лог.



  • В общем то пока Ваш вариант работает, эта проблема не сильно подпирает (хотя вопрос пока не решенный).
    Но если можно в догонку еще один более важный сейчас вопрос.
    Можно ли вообще между вызовами отделных частей модуля (настройка и рабочие функции) сохранить результаты их работы в глобальной переменной ?
    А то чето не оч. получается и не понятно толи модуль между вызовами выгружается и сохранить не получится, толи у меня опять косяк какой всплыл или просто что то еще для этого надо допилить ?



  • @_User_ said in Не работает вызов функции:

    Можно ли вообще между вызовами отделных частей модуля (настройка и рабочие функции) сохранить результаты их работы в глобальной переменной ?

    Зачем именно в глобальной? Глобальная переменная BAS видна всем потокам, то есть ваше действие из разных потоков будет перезаписывать данные в глобальной переменной. Храните данные в локальной переменной

    А то чето не оч. получается и не понятно толи модуль между вызовами выгружается и сохранить не получится, толи у меня опять косяк какой всплыл или просто что то еще для этого надо допилить ?

    Основная проблема в том, что вы используете одинаковые слова для обозначения разных элементов. Создайте тестовый скрипт для демонстрации проблемы - так будет помочь проще и быстрее



  • @Fox

    @Fox said in Не работает вызов функции:

    Зачем именно в глобальной? Глобальная переменная BAS видна всем потокам, то есть ваше действие из разных потоков будет перезаписывать данные в глобальной переменной. Храните данные в локальной переменной

    Это модуль, и его глобальные переменные останутся при нем, на сколько я понимаю (они не появляются в другом проекте когда я вставляю туда этот скомпилированный кубик)
    Глобальные переменные - для обмена данными между частями внутри этого модуля (локальные переменные работают только в режиме записи)

    В конечном итоге это должен быть модуль ожидания.
    В общей функции - делаются настройки поведения курсора при ожидании, тип поведения, порог совпадения для base64 и несколько сторок данных (не буду вдаваться в подробности чтобы не путать). Вот эти данные и должны храниться между вызовами и быть доступны везде в пределах модуля.
    2 другие функции - это функции ожидания (одна простое ожидание со своими примочками, вторая ожидание с повтором действия (клик -> ждем реакции, нет -> повтор клика)). Эти 2 функции используют одинаковые данные, хранимые в одном и томже массиве (но каждая свои - входные параметры "кубика"), которые обрабатываются одними и теми же функциями и здесь глобальная переменная нужна для передачи этих данных на обработку.

    В общем вначале задали общие настроки и они хранятся все время работы (уже того скрипта куда вставим этот модуль)(или до повторного задания).
    Вызываем простое ожидание, оно набивает рабочий массив своими данными + общие настройки и отрабатывает как прописано.
    Если вызываем клик с ожиданием - оно набивает тотже рабочий массив своими данными + общие настройки и отрабатывает как ему предписано (И использует теже функции обработки, что и простое ожидание).

    Написать тестовый скрипт для демонстрации это сейчас то же чтои дописать не работающий :D
    Закончу (надеюсь) - выложу полность. Думаю будет полезной штукой (у меня должен сократить объем кода обвязки наверно на четверть)



  • Я уже со счета сбился сколько раз я все это переписывал (больше 30 точно)
    И просто хотел сразу узнать будет ли в глобальной переменной модуля храниться его общие настройки (для него же) между вызовами или все полность выгружается как только кубик отработал (НУ очень не хочется опять вхолостую столько кода лопатить и не факт что без ошибок которые потом снова хрен знает сколько вылавливать)



  • @_User_ будет, можете посмотреть, как это реализовано в других модулях - для капчи, приёма СМС и так далее.



  • @Oyasumi-Punpun
    Все что я узнал о модулях я добыл именно таким способом + гугл который постоянно посылает на этот форум и сайты по JS (с которым я кстати начал знакомиться именно из-за этого модуля). Так что все что пришло в голову - уже испробовал.



  • @_User_ said in Не работает вызов функции:

    @Oyasumi-Punpun
    Все что я узнал о модулях я добыл именно таким способом + гугл который постоянно посылает на этот форум и сайты по JS (с которым я кстати начал знакомиться именно из-за этого модуля). Так что все что пришло в голову - уже испробовал.

    https://cheshirecaat.github.io/bas-docs/



  • @Fox
    уже читал
    и сами модули изучал (на сколько хватило начальных познаний в JS "со словарем" :D )


Log in to reply