Javascript Nodejs:如果包含值,则将事件侦听器附加到数组
在我的项目中,我有四个对象(连接到硬件解码器的连接器),它们显然是同步的。和我要解密的字符串数组(队列)。是否有方法检查数组是否包含来自解码器对象的值?我想我可以通过EventEmitter实现,但我不知道如何实现 谢谢你的帮助 -更新 来自另一台服务器的输入值为64位字符串,解码器返回15位值。为了通过串口进行通信,我使用这个软件包。我知道如何只使用一个解码器进行通信,但不知道如何使用更多解码器(以适当的方式) 我与一个解码器通信的代码Javascript Nodejs:如果包含值,则将事件侦听器附加到数组,javascript,arrays,node.js,Javascript,Arrays,Node.js,在我的项目中,我有四个对象(连接到硬件解码器的连接器),它们显然是同步的。和我要解密的字符串数组(队列)。是否有方法检查数组是否包含来自解码器对象的值?我想我可以通过EventEmitter实现,但我不知道如何实现 谢谢你的帮助 -更新 来自另一台服务器的输入值为64位字符串,解码器返回15位值。为了通过串口进行通信,我使用这个软件包。我知道如何只使用一个解码器进行通信,但不知道如何使用更多解码器(以适当的方式) 我与一个解码器通信的代码 var SerialPort = require('se
var SerialPort = require('serialport');
var ports = [];
ports.push( {device: new SerialPort('/dev/cu.usbmodem1411', { autoOpen: false }), enable: true});
ports.push( {device: new SerialPort('/dev/cu.usbmodem1421', { autoOpen: false }), enable: true});
//id: incoming encrypted value
module.exports.decryption = function (id, callback) {
ports[0].enable = false;
var idArray = [];
idArray[0] = id.slice(0, 16);
idArray[1] = id.slice(16, 32);
idArray[2] = id.slice(32, 48);
idArray[3] = id.slice(48, 64);
ports[0].device.open(function (err) {
if (err) {
return console.log('Error opening port: ', err.message);
}
port[0].device.write('d01');
let index = 0;
var buffer = setInterval(function () {
port[0].device.write(idArray[index]);
if (index === idArray.length - 1) clearInterval(buffer);
index++;
}, 1);
});
ports[0].device.on('data', function (data) {
callback( hex2a(data.toString('ascii')));
ports[0].device.close(function (response) {
console.log("device disconnected")
},function (error) { });
ports[0].enable = true;
});
};
function hex2a(hexx) {
var hex = hexx.toString();//force conversion
var str = '';
for (var i = 0; i < hex.length; i += 2)
str += String.fromCharCode(parseInt(hex.substr(i, 2), 16));
return str;
}
var SerialPort=require('SerialPort');
var端口=[];
push({device:newserialport('/dev/cu.usbmodem1411',{autoOpen:false}),enable:true});
push({device:newserialport('/dev/cu.usbmodem1421',{autoOpen:false}),enable:true});
//id:传入的加密值
module.exports.decryption=函数(id,回调){
端口[0]。启用=false;
var-idArray=[];
idArray[0]=id.slice(0,16);
idArray[1]=id.slice(16,32);
idArray[2]=id.slice(32,48);
idArray[3]=id.slice(48,64);
端口[0]。设备。打开(函数错误){
如果(错误){
返回console.log('打开端口时出错',错误消息);
}
端口[0]。设备。写入('d01');
设指数=0;
var buffer=setInterval(函数(){
端口[0]。设备。写入(idArray[index]);
如果(索引===idArray.length-1)clearInterval(缓冲区);
索引++;
}, 1);
});
端口[0]。设备。在('data',函数(data){
回调(hex2a(data.toString('ascii'));
端口[0]。设备。关闭(函数(响应){
console.log(“设备断开连接”)
},函数(错误){});
端口[0]。启用=true;
});
};
函数hex2a(hexx){
var hex=hexx.toString();//强制转换
var-str='';
对于(变量i=0;i
我认为您的问题将受益于一些代码,特别是您可以共享的关于解码器对象和数组/队列的任何定义。再加上迄今为止解决该问题的任何尝试,无论多么不完整或简化。@请问您有什么解决方案吗?为了澄清,您似乎想知道两件事:(1)如何使用多个解码器进行设置;(2)如何检查您是否已解码数组中的某个值(可能是为了通过缓存节省时间)。正确吗?@Will是的,对。@Will用户会将加密值发送到服务器,而服务器只有解码器。所以,如果用户发送多个请求,我需要创建队列。例如,服务器同时获得10个请求,所以在解码器获得下一个请求之前,8个请求将在队列中。我认为您的问题将受益于一些代码,特别是您可以共享的关于解码器对象和数组/队列的任何定义。再加上迄今为止解决该问题的任何尝试,无论多么不完整或简化。@请问您有什么解决方案吗?为了澄清,您似乎想知道两件事:(1)如何使用多个解码器进行设置;(2)如何检查您是否已解码数组中的某个值(可能是为了通过缓存节省时间)。正确吗?@Will是的,对。@Will用户会将加密值发送到服务器,而服务器只有解码器。所以,如果用户发送多个请求,我需要创建队列。例如,服务器同时获得10个请求,所以在解码器获得下一个请求之前,8个请求将在队列中。