Javascript 我如何才能绕过serialport nodejs包的承诺

Javascript 我如何才能绕过serialport nodejs包的承诺,javascript,node.js,arduino,serial-port,Javascript,Node.js,Arduino,Serial Port,我启动了一个项目,需要在arduino和本地nodejs服务器之间进行通信(稍后数据将通过http请求或套接字发送到实际的远程服务器)。我正在使用节点包serialport。在串行通信开始时,服务器需要“找到”arduino。我已决定以下谈判法典: 1) 服务器发送arduino正在侦听的“c”字符(如在connect中) 2) arduino用服务器将侦听的另一个“c”回复所有“c” 换句话说,当双方都收到一个“c”表示串行连接工作 然而,由于serialport使用承诺,我无法检查所有可用端

我启动了一个项目,需要在arduino和本地nodejs服务器之间进行通信(稍后数据将通过http请求或套接字发送到实际的远程服务器)。我正在使用节点包serialport。在串行通信开始时,服务器需要“找到”arduino。我已决定以下谈判法典:
1) 服务器发送arduino正在侦听的“c”字符(如在connect中)
2) arduino用服务器将侦听的另一个“c”回复所有“c”
换句话说,当双方都收到一个“c”表示串行连接工作

然而,由于serialport使用承诺,我无法检查所有可用端口,并检查是否有arduino(其回复为“c”)。
以下是我到目前为止的想法:

var SerialPort=require('SerialPort');
var Readline=require(“@serialport/parser Readline”);
异步函数tryPort(路径){
var端口=新的串行端口(路径{
波特率:9600
});
端口.on('error',函数(err){
控制台日志(err);
});
port.pipe(新的读线({分隔符:'\n'})).on('data',(data)=>{
控制台日志(端口);
控制台日志(数据);
如果(数据=='c'){
返回端口;
}
port.close();
});
端口写入(“c”,函数(err){
if(err)console.log(err);
});
}
异步函数connect(){
var连接,port=wait SerialPort.list();
对于(i=0;i{
如果(!连接){
console.log(“未找到端口/响应”);
}否则{
控制台日志(连接);
}
}, 3000);
}
connect();


我假设变量“connection”将被分配最后一个正确响应的端口的值,因为该端口需要最长的时间才能完成。不幸的是,这似乎不符合承诺。。。因此,我想知道是否还有其他方法来完成它?

1)您的
tryPort()
函数并没有像我想的那样真正等待
'data'
事件。2) 在
for
循环中,您是按顺序执行
tryPort
s,而不是并行执行。@shkaper如何并行执行所有tryPort()实例?或者我如何让它“等待”数据返回?
var SerialPort = require('serialport');
var Readline = require('@serialport/parser-readline');

async function tryPort(path) {
    var port = new SerialPort(path, {
        baudRate: 9600
    });
    port.on('error', function (err) {
        console.log(err);
    });
    port.pipe(new Readline({ delimiter: '\n' })).on('data', (data)=>{
        console.log(port);
        console.log(data);
        if (data == 'c') {
            return port;
        }
        port.close();
    });
    port.write("c", function (err) {
        if (err) console.log(err);
    });
}
async function connect() {
    var connection, ports = await SerialPort.list();
    for(i=0;i<ports.length;i++){
        connection = await tryPort(ports[i].path);
    }
    setTimeout(() => {
        if (!connection) {
            console.log("no port/response found");
        }else{
            console.log(connection);
        }
    }, 3000);
}

connect();