Я записываю TCP-сервер с Java + Rhino на nodeJS ...
И у меня проблема с блокировкой выполнения кода без блокировки прослушивателя TCP (socket.on ('data', () => {})…
Зачем мне это нужно: мне нужно, чтобы синхронизация отвечала от ожидающего графического интерфейса ... в Java он был покрыт дочерним процессом прослушивателя TCP, а в основном процессе былцикл вроде:
// simulate message loop
boolean enddialog = false;
int endtype = 0;
try {
while (!end) {
String s = "";
s = ess.dequeueCommand();
if (s.equals("mennu1")) {
end = true;
endtype = 0;
}
if (s.equals("menu2")) {
end = true;
endtype = 1;
}
}
} catch (Exception e) {
}
Deasync мне очень помог с синхронизацией вызовов в БД ...
var deasync = require('deasync');
module.exports = function DB(){
var knex = require('knex')(require("./../../config").DB);
this.executeRowsetParam = (sql, param) => {
let done = false;
knex.raw(sql, param).then((r => {
done = r;
})).catch((e => {
throw "Error in query "+ e
}))
deasync.loopWhile(function () { return !done; });
return done
}
}
Я пробовал deasync, но он будет блокировать прослушиватель событий ... Я заставил его работать с Promiseно это не будет работать в этом случае из-за кодовой базы, которая написана в js для «старого» сервера, и я не могу переписать этот кодовой пример Promise:
return new Promise( (res) => {
if(this.sel == null){
let callb = (d)=>{
var ed = Buffer.from(d);
this.GetDataStricte(ed).then((da)=>{
res(da);
this.socket.removeListener('data',callb);
});
}
this.sel = this.socket.on('data',callb);
}
});
Не могли бы выпомогите мне?