(这是我第一次接触 Javascript。...)
嗨,我必须用Express写一个rest api,这没问题,因为到处都有大量的例子。
不过,在休息请求中,我必须联系另一个 tcp 服务器(用于 modbus)。因此,在这样的请求中,我必须等待来自 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);
这是要走的路吗?