【问题标题】:how can i use serial port Synchronously in Node js ?如何在 Node js 中同步使用串口?
【发布时间】:2018-08-28 04:48:38
【问题描述】:

我在node js中使用serialport模块,像这样执行代码,但是发生了错误。

for(i=0; i<5; i++){
    a(i) ; 
}

function a(i){

    port = new serialport(port_name,{

         baudRate:9600 ,

         parser: new serialport.parsers.Readline('\n')
    });

    port.on('open',function(){
         port.write(port_command+'\n');
         data = port.read();
         console.log(i + data);
         port.close();
    });
}

但是发生了错误,

“UnhandledPromiseRejectionWarning:错误资源暂时不可用,无法锁定端口”

“UnhandledPromiseRejectionWarning:未处理的承诺拒绝。此错误源于在没有 catch 块的情况下抛出异步函数内部,或拒绝未使用 .catch() 处理的承诺。”

“DeprecationWarning:不推荐使用未处理的承诺拒绝。将来, 未处理的承诺拒绝将终止节点。 js进程与 非零退出代码。

我希望它们按顺序运行

a(0) 端口打开、写入、读取、关闭

a(1) 端口打开、写入、读取、关闭

a(2) 端口打开、写入、读取、关闭

a(3) 端口打开、写入、读取、关闭

a(4) 端口打开、写入、读取、关闭

我认为 a(0) open, a(1) open so error .. 我该如何解决这个问题?

【问题讨论】:

    标签: javascript node.js asynchronous async-await serial-port


    【解决方案1】:

    您可以从端口关闭时解析的函数返回一个承诺:

     function ping(i){
       const port = new serialport(port_name,{
         baudRate:9600 ,
         parser: new serialport.parsers.Readline('\n')
       });
    
       port.on('open',function(){
         port.write(port_command+'\n');
         data = port.read();
         console.log(i + data);
         port.close();
      });
    
      return new Promise(resolve => port.on("close", resolve));
     }
    

    现在你可以实现你的循环:

     (async function loop() {
       for(let i = 0; i < 3; i++) {
         await ping(i);
       }
     })();
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-06-14
      • 2020-04-28
      • 1970-01-01
      • 1970-01-01
      • 2013-03-12
      • 1970-01-01
      • 2020-09-26
      • 2017-12-09
      相关资源
      最近更新 更多