@m4zuper Я ошибся, не помогло.
Вот проект:
Test script.xml
Вот таблица:
Таблица для теста.xlsx
Добрый день!
Windows 10 x64, BAS 22.1.2
Пробую поработать с BAS_API непосредственно из Node.js. Добрался до функционала File Search, есть необходимость найти все дочерние каталоги в указанной подпапке.
Исходные данные:
Для теста использую одну пустую подпапку и один пустой файл:

Тест 1.
Сперва накидал всё на кубиках - никаких проблем ни в режиме Записи, ни в Запуске в 10 потоков.
Тест 2.
Перенес код скрипта в Node.js - никаких проблем ни в режиме Записи, ни в Запуске в 10 потоков.
var TESTDIR = "d:/temp/filesearch/";
async function fileSearch(folder, mask = '*', mustContain = '', includeFolders = true, includeFiles = true, recursive = true) {
await BAS_API("native_async(\"filesystem\", \"search\", JSON.stringify({folder: \"" + folder + "\",mask: \"" + mask + "\",contains:\"" + mustContain + "\",include_folders:" + includeFolders + ",include_files:" + includeFiles + ",recursive:" + recursive + "}))!\nVAR_RESULT = JSON.parse(_result())[\"d\"]");
return [[RESULT]];
}
console.log("Результат через Node.JS: " + await fileSearch(TESTDIR, "*", '', true, false, false));
Тест 3.
Перенес код для поиска файлов в модуль Node.js и использую его в основном файле.


После запуска в 10 потоков, всего для одного потока результат был ожидаемым:
198888837] [16:01:04] Thread #1 : Результат через Node.JS: before BAS API
[198888837] [16:01:04] Thread #2 : Результат через Node.JS: before BAS API
[878394547] [16:01:04] Thread #1 : Результат через кубики: d:/temp/filesearch/emptyfolder
[16:01:04] Thread #1 : Thread succeeded with message "Ok"
[198888837] [16:01:04] Thread #3 : Результат через Node.JS: before BAS API
[878394547] [16:01:04] Thread #2 : Результат через кубики: d:/temp/filesearch/emptyfolder
[16:01:04] Thread #2 : Thread succeeded with message "Ok"
[198888837] [16:01:04] Thread #4 : Результат через Node.JS: before BAS API
[878394547] [16:01:04] Thread #3 : Результат через кубики: d:/temp/filesearch/emptyfolder
[16:01:04] Thread #3 : Thread succeeded with message "Ok"
[198888837] [16:01:04] Thread #5 : Результат через Node.JS: before BAS API
[878394547] [16:01:04] Thread #4 : Результат через кубики: d:/temp/filesearch/emptyfolder
[16:01:04] Thread #4 : Thread succeeded with message "Ok"
[198888837] [16:01:04] Thread #6 : Результат через Node.JS: before BAS API
[878394547] [16:01:04] Thread #5 : Результат через кубики: d:/temp/filesearch/emptyfolder
[16:01:04] Thread #5 : Thread succeeded with message "Ok"
[198888837] [16:01:04] Thread #7 : Результат через Node.JS: before BAS API
[878394547] [16:01:04] Thread #6 : Результат через кубики: d:/temp/filesearch/emptyfolder
[16:01:04] Thread #6 : Thread succeeded with message "Ok"
[198888837] [16:01:04] Thread #8 : Результат через Node.JS: before BAS API
[878394547] [16:01:04] Thread #7 : Результат через кубики: d:/temp/filesearch/emptyfolder
[16:01:04] Thread #7 : Thread succeeded with message "Ok"
[198888837] [16:01:04] Thread #9 : Результат через Node.JS: before BAS API
[878394547] [16:01:04] Thread #8 : Результат через кубики: d:/temp/filesearch/emptyfolder
[16:01:04] Thread #8 : Thread succeeded with message "Ok"
[198888837] [16:01:04] Thread #10 : Результат через Node.JS: d:/temp/filesearch/emptyfolder
[878394547] [16:01:04] Thread #9 : Результат через кубики: d:/temp/filesearch/emptyfolder
[16:01:04] Thread #9 : Thread succeeded with message "Ok"
[878394547] [16:01:04] Thread #10 : Результат через кубики: d:/temp/filesearch/emptyfolder
[16:01:04] Thread #10 : Thread succeeded with message "Ok"
[16:01:04] Script finished correctly
Тест 4
Ну, думаю, рассинхрон какой-то, возможно с переменными BAS. Ну может в модулях многопоточно некорректно отрабатывают или еще что. Добавляю паузу на каждый поток, чтобы такой ситуации не повторялось.

И теперь вообще непонятно что происходит, поток который в Тесте 3 возвращал правильный результат отработал, а остальные висят и завершают свою работу по таймауту:
[198888837] [16:05:26] Thread #9 : Результат через Node.JS: d:/temp/filesearch/emptyfolder
[878394547] [16:05:26] Thread #9 : Результат через кубики: d:/temp/filesearch/emptyfolder
[16:05:26] Thread #9 : Thread succeeded with message "Ok"
[198888837] [16:06:26] Thread #1 : Thread ended with message "Embedded language execution timeout"
[198888837] [16:06:26] Thread #2 : Thread ended with message "Embedded language execution timeout"
[198888837] [16:06:26] Thread #3 : Thread ended with message "Embedded language execution timeout"
[198888837] [16:06:26] Thread #4 : Thread ended with message "Embedded language execution timeout"
[198888837] [16:06:26] Thread #5 : Thread ended with message "Embedded language execution timeout"
[198888837] [16:06:27] Thread #6 : Thread ended with message "Embedded language execution timeout"
[198888837] [16:06:27] Thread #7 : Thread ended with message "Embedded language execution timeout"
[198888837] [16:06:27] Thread #8 : Thread ended with message "Embedded language execution timeout"
[198888837] [16:06:27] Thread #10 : Thread ended with message "Embedded language execution timeout"
[16:06:27] Script finished correctly
Тест 5
Ну и последний тест - проверил что пауза в Node.js без другого функционала нормально работает - так и есть.
Собственно, тут возможно не один баг, но в чем его суть мне сложно понять.
Файл с проектом прикладываю.
0_1569330709993_filesearch.xml
@luka said in Проблемы с вызовом BAS_API File Search из Node.JS:
Добрый день!
Windows 10 x64, BAS 22.1.2
Пробую поработать с BAS_API непосредственно из Node.js. Добрался до функционала File Search, есть необходимость найти все дочерние каталоги в указанной подпапке.Собственно, тут возможно не один баг, но в чем его суть мне сложно понять.
Файл с проектом прикладываю.
Я пока разбираюсь, но для чего использовать именно api BAS из node js? Можно же вызывать функции BAS из node:
var TESTDIR = "C:/test/14/";
var result = await BAS_FUNCTION(
"fileSearch",
{"path": TESTDIR}
)
console.log("Результат через Node.JS: " + result)

Много причин:

[926841380] [12:06:30] Thread #8 : Thread ended with message "TypeError: module.parent.BAS_FUNCTION is not a function"
Поправленный тестовый проект для использования в модулях BAS_FUNCTION прикладываю
0_1569402434652_filesearch.xml
@luka said in Проблемы с вызовом BAS_API File Search из Node.JS:
текущий:
var TESTDIR = "C:/test/14/"
var fileSearch = require("../bas.js");
await fileSearch(TESTDIR, "*", '', true, false, false)
console.log("Результат через Node.JS: " + [[RESULT]]);
модуль bas.js:
module.exports = async function(folder, mask = '*', mustContain = '', includeFolders = true, includeFiles = true, recursive = true) {
return BAS_API("native_async(\"filesystem\", \"search\", JSON.stringify({folder: \"" + folder + "\",mask: \"" + mask + "\",contains:\"" + mustContain + "\",include_folders:" + includeFolders + ",include_files:" + includeFiles + ",recursive:" + recursive + "}))!\nVAR_RESULT = JSON.parse(_result())[\"d\"]");
}

Тестовый скрипт
Но вызывать функции BAS в разы проще и надёжнее, чем использовать апи BAS в модулях ноды. После компиляции скрипта (даже с защитой) весь код node js будет в открытом виде.
@fox спасибо за пример, но этот код как раз просто обходит баг, который я озвучил.
Если в bas.js написать
module.exports = async function (folder, mask = '*', mustContain = '', includeFolders = true, includeFiles = true, recursive = true) {
await BAS_API("native_async(\"filesystem\", \"search\", JSON.stringify({folder: \"" + folder + "\",mask: \"" + mask + "\",contains:\"" + mustContain + "\",include_folders:" + includeFolders + ",include_files:" + includeFiles + ",recursive:" + recursive + "}))!\nVAR_RESULT = JSON.parse(_result())[\"d\"]");
return [[RESULT]];
}
то все опять работает по-старому.
Я пытаюсь раскидать всю вспомогательную логику по разным модулям, проект большой и писать в одном файле или тем более использовать визуальный конструктор - в разы увеличит время разработки. Для враппера BAS получается что-то вроде такого:

В Вашем примере Вы вынесли использование [[RESULT]] из модуля - а в этом, похоже, и есть сам баг. К примеру, если в модуле использовать более простую функцию API BAS, то ошибка остается:
module.exports = async function () {
await BAS_API("VAR_RESULT = thread_number()");
return [[RESULT]];
}
@fox said in Проблемы с вызовом BAS_API File Search из Node.JS:
Но вызывать функции BAS в разы проще и надёжнее, чем использовать апи BAS в модулях ноды. После компиляции скрипта (даже с защитой) весь код node js будет в открытом виде.
Про надежность - понятно, сам код скрипт может изменяться от версии к версии, а в моем коде ничего не изменится, это я принимаю. По поводу компиляции и защиты - меня это вообще никак не беспокоит, это не публичный проект.
Мне намного проще визуально, и быстрее по времени написать такой код, чем кубиками складывать его:

Все в одном месте и сразу понятно что есть что.
@luka said in Проблемы с вызовом BAS_API File Search из Node.JS:
В Вашем примере Вы вынесли использование [[RESULT]] из модуля - а в этом, похоже, и есть сам баг. К примеру, если в модуле использовать более простую функцию API BAS, то ошибка остается:
ответ @support
Исправлю в следующей