2017-01-08 7 views
1

Я довольно новичок в узле и асинхронном программировании (я исхожу из C-фона), и у меня возникают проблемы с автоматическим подключением к порту, у которого есть устройство с определенный vendorID с использованием serialport в Node.js. У меня все работает отдельно, т.е. Я могу подключиться к порту, и я могу найти порт с определенным идентификатором vendorID, но я не могу подключиться к порту, который я нашел. Вот код, который я до сих пор:Автоматическое подключение к определенному устройству с последовательным портом в Node.js

var SerialPort = require('serialport'); 

var MYport; 

SerialPort.list(function (err, ports) { 
    ports.forEach(function(port) { 
    if(port.vendorId == 9999){ 
     console.log('Found It') 
     MYport = port.comName.toString(); 
     console.log(MYport); 
    } 
    }); 
}); 

var port = new SerialPort(MYport, { 
    parser: SerialPort.parsers.readline('\n') 
}); 

Когда запускается я получаю сообщение об ошибке из-за того, что MYport не определен в то время, что порт создан и подключен.

Я знаю, что, скорее всего, мне придется использовать функцию обратного вызова, но я просто не могу понять это.

Спасибо за помощь

ответ

1

SerialPort.list является функцией асинхронной,

так что вам нужно разместить подключение к SerialPort после испускают обратный вызова функции асинхронной.

так:

var SerialPort = require('serialport'); 

var MYport; 

SerialPort.list(function (err, ports) { 
    ports.forEach(function(port) { 
    if(port.vendorId == 9999){ 
     console.log('Found It') 
     MYport = port.comName.toString(); 
     console.log(MYport); 
    } 
    }); 

    var port = new SerialPort(MYport, { 
    parser: SerialPort.parsers.readline('\n') 
    }); 

}); 
+0

Хорошо, я вижу. Я также добавил функцию port.on для сбора данных и включил это снова в функцию списка, и теперь все работает. Для меня это просто неинтуитивно. Спасибо за помощь! – Tyler