BAS_API в Node js
-
Асинхронный код в node js. BAS_API не выполняется. Отдельно проверял, работает, а здесь нет.
all_ws[ws].on('message', function incoming(data) { if (data != 3) { var array = data.match(/([|{).*(]|})/g)[0]; var msg = JSON.parse(array); if (msg[0] == 'message') { if (msg[1].user_login === "ara") { switch (msg[1].message) { case "up": BAS_API("PSet(\"basglobal\", \"MESSAGE_QUEUE\", parseInt(JSON.parse(P(\"basglobal\", \"MESSAGE_QUEUE\") || \"0\")) + parseInt(1))"); break; case "down": BAS_API("PSet(\"basglobal\", \"MESSAGE_QUEUE\", parseInt(JSON.parse(P(\"basglobal\", \"MESSAGE_QUEUE\") || \"0\")) + parseInt(-1))"); break; default: } } else { } } } });
-
@vanarok said in BAS_API в Node js:
Асинхронный код в node js. BAS_API не выполняется. Отдельно проверял, работает, а здесь нет.
Так и есть, если не оборачивать все в промис и не ждать выполения через await, то функции БАС в таком коде не сработают.
-
@UserTrue пытался с 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: } } }); }); }));
-
@Fox ну такое, суть моего кода в асинхронности, полностью синхронный мне не нужен).
-
Я так понимаю тут никак не выкрутится без завершения всего кода node js.
-
@vanarok said in BAS_API в Node js:
Я так понимаю тут никак не выкрутится без завершения всего кода node js.
Код node может работать асинхронно, но на сколько я помню он не может асинхронно работать с BAS (запускать функции, изменять переменные при завершённом действии 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')
-
@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')
Это вы к чему?