Выполнение кода блока Nodejs до получения команды TCP (в ожидании события графического интерфейса) - PullRequest
0 голосов
/ 26 мая 2018

Я записываю 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);
            }

        });

Не могли бы выпомогите мне?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...