@olegar said in Как вызвать функцию БАС в node?:
Благодарю. А если в вызываемой функции есть "node.js" то такая функция работать не будет?
Другая функция на встроенном языке уже выполняется
Да
Доброго времени суток. Из модулей не читаются переменные BAS.
Создаём новый кирпич node.js и пишем:
await require("../InternalFunctions")();
Добавляем файл InternalFunctions со следующим содержимым:
module.exports = async function(){
await BAS_API('VAR_TEST1 = "test";');
console.log([[TEST1]]);
};
В выводе консоли ловим "undefined" вместо "test". В основном модуле тот же код работает как надо.
@Elemental said in Баг с переменными в модулях node.js:
Доброго времени суток. Из модулей не читаются переменные BAS.
Создаём новый кирпич node.js и пишем:await require("../InternalFunctions")();Добавляем файл InternalFunctions со следующим содержимым:
module.exports = async function(){ await BAS_API('VAR_TEST1 = "test";'); console.log([[TEST1]]); };В выводе консоли ловим "undefined" вместо "test". В основном модуле тот же код работает как надо.
await require("../InternalFunctions")();
[[TEST1]]

скрипт: 101.xml
@Elemental Это не костыль, это особенность работы внутренних языков. При вызове BAS_API процесс ноды уже должен иметь список переменных, которые он будет использовать, он не может их взять с потолка, иначе получилась бы каша. Так что нужно либо в самом экшене Node.js сделать так, как показал @Fox (можно до импорта функции, можно после) либо проинициализировать переменную до кубика ноды, это неважно. Главное дать понять системе, что эту переменную в принципе нужно создать.
@Oyasumi-Punpun Я в своей жизни сталкивался с бейсиком, паскалем, делфи, C, C++, PHP, JavaScript, Java и др. и ни в одном языке программирования рабочие переменные функции не нужно было инициализировать за их пределом и тем более, в основном блоке кода, в другом файле, не относящемся ни коим образом к этому модулю. Так что да, это костыль.
Тоже столкнулся с этим. И тупо инициализирую их перед инициализацией модуля.
[[SCR_WIDTH]]=0;
[[WND_HEIGHT]]=0;
[[CURRENT_URL]]="";
Если эти переменные уже инициализированы выше, можно вместо инициализации их в массив загнать. Это тоже работает как вариант костыля, переменные начинают быть видны в модуле.
let tmp=[ [[SCR_WIDTH]], [[WND_HEIGHT]], [[CURRENT_URL]] ];
Может это уже где-то писали.
Эхх, если бы супер-программисты вроде @Elemental которые видели 100500 языков заглядывали в реализацию (или хотя бы интересовались), могли бы увидеть, что переменные баса во первых != переменным js, а во вторых передаются массивом в качестве параметра ПРИ ВЫЗОВЕ модуля, и, конечно, не будут видны при использовании BAS_API в таком случае. Но как сказал уважаемый ТС, это костыль (хотя это не так), но ему лучше знать.
@Dmitry33 по делу - можно устанавливать значения перед require(...) прямо в коде, можно как у вас в примере, с помощью массива. На самом деле главная цель - хоть как-то задать эти переменные, можно даже так, если вам начальное значение не нужно:
[[TEST1]];
[[TEST2]];
...
[[TESTN]];
@Oyasumi-Punpun А чо теперь так можно? +1 Надоело задавать [[]] = ничего=)