Как ждать подключения к сокету в запросе покоя? - PullRequest
0 голосов
/ 10 октября 2018

(Это мой первый контакт с Javascript. ...)

Привет, мне нужно написать API для отдыха с Express, что не проблема из-за огромного количества примеров повсюду.

Хотя в рамках запроса на отдых я должен связаться с другим tcp-сервером (для Modbus).Итак, в рамках такого запроса я должен ждать события connect / ready от socket.connect ().Как правильно это сделать?

Я придумал инкапсулировать socket.connect () в Promise.Раздетый код выглядит так:

function get_holding() {
    const socket = new net.Socket();
    const client = new modbus.client.TCP(socket); /* = require('jsmodbus') */

    return new Promise(function (resolve, reject) {
        // fulfill the Promise, proceed in the chain
        socket.on('ready', function () { resolve(); });

        // close connection after receiving the response
        socket.on('data', function () { socket.end(); });

        socket.on('error', function (error) { reject(error); });
        socket.connect(/* ip and port */);
    })
    .then(function () {
        // could be above in socket.on('ready', ...),
        // but splitting looks better
        return client.readHoldingRegisters(0, 2);
    })
    .then(function (response) {
        // process response (code stripped)
        return /* processed values */;
    })
    .catch(function (error) {
        throw error;
    });
}

function controller_get_holding(req, res) {
    get_holding()
        .then(function (values) {
            res.json(values);
        })
        .catch(function (error) {
            res.send(require('util').inspect(arguments, {depth: null}));
        });
}

...
app.route('/holding')
    .get(controller_get_holding);

Это путь?

1 Ответ

0 голосов
/ 12 октября 2018

Только что нашел Обещание-сокет , и это все, что мне нужно.

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