Javascript Nodejs:如果包含值,则将事件侦听器附加到数组

Javascript Nodejs:如果包含值,则将事件侦听器附加到数组,javascript,arrays,node.js,Javascript,Arrays,Node.js,在我的项目中,我有四个对象(连接到硬件解码器的连接器),它们显然是同步的。和我要解密的字符串数组(队列)。是否有方法检查数组是否包含来自解码器对象的值?我想我可以通过EventEmitter实现,但我不知道如何实现 谢谢你的帮助 -更新 来自另一台服务器的输入值为64位字符串,解码器返回15位值。为了通过串口进行通信,我使用这个软件包。我知道如何只使用一个解码器进行通信,但不知道如何使用更多解码器(以适当的方式) 我与一个解码器通信的代码 var SerialPort = require('se

在我的项目中,我有四个对象(连接到硬件解码器的连接器),它们显然是同步的。和我要解密的字符串数组(队列)。是否有方法检查数组是否包含来自解码器对象的值?我想我可以通过EventEmitter实现,但我不知道如何实现

谢谢你的帮助

-更新

来自另一台服务器的输入值为64位字符串,解码器返回15位值。为了通过串口进行通信,我使用这个软件包。我知道如何只使用一个解码器进行通信,但不知道如何使用更多解码器(以适当的方式)

我与一个解码器通信的代码

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个请求将在队列中。