(Это мой первый контакт с 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);
Это путь?