Не работает вызов функции
-
Подскажите пожалуйста почему не работает вызов функции ?
В кубике "выполнить код" есть функция
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 said in Не работает вызов функции:
Зачем именно в глобальной? Глобальная переменная BAS видна всем потокам, то есть ваше действие из разных потоков будет перезаписывать данные в глобальной переменной. Храните данные в локальной переменной
Это модуль, и его глобальные переменные останутся при нем, на сколько я понимаю (они не появляются в другом проекте когда я вставляю туда этот скомпилированный кубик)
Глобальные переменные - для обмена данными между частями внутри этого модуля (локальные переменные работают только в режиме записи)В конечном итоге это должен быть модуль ожидания.
В общей функции - делаются настройки поведения курсора при ожидании, тип поведения, порог совпадения для base64 и несколько сторок данных (не буду вдаваться в подробности чтобы не путать). Вот эти данные и должны храниться между вызовами и быть доступны везде в пределах модуля.
2 другие функции - это функции ожидания (одна простое ожидание со своими примочками, вторая ожидание с повтором действия (клик -> ждем реакции, нет -> повтор клика)). Эти 2 функции используют одинаковые данные, хранимые в одном и томже массиве (но каждая свои - входные параметры "кубика"), которые обрабатываются одними и теми же функциями и здесь глобальная переменная нужна для передачи этих данных на обработку.В общем вначале задали общие настроки и они хранятся все время работы (уже того скрипта куда вставим этот модуль)(или до повторного задания).
Вызываем простое ожидание, оно набивает рабочий массив своими данными + общие настройки и отрабатывает как прописано.
Если вызываем клик с ожиданием - оно набивает тотже рабочий массив своими данными + общие настройки и отрабатывает как ему предписано (И использует теже функции обработки, что и простое ожидание).Написать тестовый скрипт для демонстрации это сейчас то же чтои дописать не работающий :D
Закончу (надеюсь) - выложу полность. Думаю будет полезной штукой (у меня должен сократить объем кода обвязки наверно на четверть)
-
Я уже со счета сбился сколько раз я все это переписывал (больше 30 точно)
И просто хотел сразу узнать будет ли в глобальной переменной модуля храниться его общие настройки (для него же) между вызовами или все полность выгружается как только кубик отработал (НУ очень не хочется опять вхолостую столько кода лопатить и не факт что без ошибок которые потом снова хрен знает сколько вылавливать)
-
@_User_ будет, можете посмотреть, как это реализовано в других модулях - для капчи, приёма СМС и так далее.
-
@Oyasumi-Punpun
Все что я узнал о модулях я добыл именно таким способом + гугл который постоянно посылает на этот форум и сайты по JS (с которым я кстати начал знакомиться именно из-за этого модуля). Так что все что пришло в голову - уже испробовал.
-
@_User_ said in Не работает вызов функции:
@Oyasumi-Punpun
Все что я узнал о модулях я добыл именно таким способом + гугл который постоянно посылает на этот форум и сайты по JS (с которым я кстати начал знакомиться именно из-за этого модуля). Так что все что пришло в голову - уже испробовал.
-
@Fox
уже читал
и сами модули изучал (на сколько хватило начальных познаний в JS "со словарем" :D )