@Daniel said in баг в отображении параметров"Запись в файл":
Блок "запись в файл", отображает параметры неверно.
Версия 28.7.0
Об этой проблеме уже сообщали, тикет по ней создан
@vanarok said in BAS_API в Node js:
Асинхронный код в node js. BAS_API не выполняется. Отдельно проверял, работает, а здесь нет.
Так и есть, если не оборачивать все в промис и не ждать выполения через await, то функции БАС в таком коде не сработают.
@vanarok said in BAS_API в Node js:
@UserTrue пытался с await , но выдает ошибку синтаксиса
С await будет работать. Скорее всего вы неправильно его добавили
https://community.bablosoft.com/topic/4450/websocket-на-node-js/6
switch (data.message) {
case "plus":
await(new Promise((resolve, reject) => {
BAS_API("PSet(\"basglobal\", \"MESSAGE_QUEUE\", parseInt(JSON.parse(P(\"basglobal\", \"MESSAGE_QUEUE\") || \"0\")) + parseInt(1))");
resolve()
}));
break;
case "minus":
await(new Promise((resolve, reject) => {
BAS_API("PSet(\"basglobal\", \"MESSAGE_QUEUE\", parseInt(JSON.parse(P(\"basglobal\", \"MESSAGE_QUEUE\") || \"0\")) + parseInt(-1))");
resolve()
}));
break;
default:
}
} else {
}
пробовал так: синхронный код в асинхронном, такое вообще реально?
@vanarok said in BAS_API в Node js:
switch (data.message) { case "plus": await(new Promise((resolve, reject) => { BAS_API("PSet(\"basglobal\", \"MESSAGE_QUEUE\", parseInt(JSON.parse(P(\"basglobal\", \"MESSAGE_QUEUE\") || \"0\")) + parseInt(1))"); resolve() })); break; case "minus": await(new Promise((resolve, reject) => { BAS_API("PSet(\"basglobal\", \"MESSAGE_QUEUE\", parseInt(JSON.parse(P(\"basglobal\", \"MESSAGE_QUEUE\") || \"0\")) + parseInt(-1))"); resolve() })); break; default: } } else { }пробовал так: синхронный код в асинхронном, такое вообще реально?
Выложите весь код, а лучше тестовый проект, так будет просто быстрее
WebSocket = require('socket.io-client');
var ws = "ws" + [[CHILD]];
var SocksProxyAgent = require('https-proxy-agent');
var endpoint = 'wss://test..ru/';
var options = {
host: [[PROXY]].split(":")[0],
port: [[PROXY]].split(":")[1],
protocol: 'http',
transports: ['websocket'],
}
var agent = new SocksProxyAgent(options);
all_ws[ws] = new WebSocket(endpoint, { agent: agent });
all_ws[ws].on('connect', () => {
all_ws[ws].on('message', (data) => {
if (data.user_login === "User") {
switch (data.message) {
case "plus":
await(new Promise((resolve, reject) => {
BAS_API("PSet(\"basglobal\", \"MESSAGE_QUEUE\", parseInt(JSON.parse(P(\"basglobal\", \"MESSAGE_QUEUE\") || \"0\")) + parseInt(1))");
resolve()
}));
break;
case "minus":
await(new Promise((resolve, reject) => {
BAS_API("PSet(\"basglobal\", \"MESSAGE_QUEUE\", parseInt(JSON.parse(P(\"basglobal\", \"MESSAGE_QUEUE\") || \"0\")) + parseInt(-1))");
resolve()
}));
break;
default:
}
} else {
}
});
});
тестовый не получится, у него много зависимостей, проще костыль сделать, чем этим заниматься
@vanarok said in BAS_API в Node js:
@Fox
тестовый не получится, у него много зависимостей, проще костыль сделать, чем этим заниматься
Попробуй вот так:
await(new Promise((resolve, reject) => {
WebSocket = require('socket.io-client');
var ws = "ws" + [[CHILD]];
var SocksProxyAgent = require('https-proxy-agent');
var endpoint = 'wss://test..ru/';
var options = {
host: [[PROXY]].split(":")[0],
port: [[PROXY]].split(":")[1],
protocol: 'http',
transports: ['websocket'],
}
var agent = new SocksProxyAgent(options);
all_ws[ws] = new WebSocket(endpoint, { agent: agent });
all_ws[ws].on('connect', () => {
all_ws[ws].on('message', (data) => {
if (data.user_login === "User") {
switch (data.message) {
case "plus":
BAS_API("PSet(\"basglobal\", \"MESSAGE_QUEUE\", parseInt(JSON.parse(P(\"basglobal\", \"MESSAGE_QUEUE\") || \"0\")) + parseInt(1))");
resolve()
case "minus":
BAS_API("PSet(\"basglobal\", \"MESSAGE_QUEUE\", parseInt(JSON.parse(P(\"basglobal\", \"MESSAGE_QUEUE\") || \"0\")) + parseInt(-1))");
resolve()
default:
}
}
});
});
}));
@vanarok said in BAS_API в Node js:
Я так понимаю тут никак не выкрутится без завершения всего кода node js.
Код node может работать асинхронно, но на сколько я помню он не может асинхронно работать с BAS (запускать функции, изменять переменные при завершённом действии node js)
@dzxt said in BAS_API в Node js:
//функция для установки глобальной переменной типа string из ноды function PSet_string(name,value){ let script = (`PSet(\"basglobal\", \"${name}\", JSON.stringify(\"${value}\"))`); BAS_API(script) } //use PSet_string('NAME','any string')
Это вы к чему?