I am porting the following code:
function FindDevices() { let ports = portLister.list(); let devices = [] for (port of ports) { try { device = new Device(port); // throws if not valid port devices.push(device); } catch { // log(port); } } return FindDevices; }
Current version should use SerialPort.list()
, which returns a promise.
So far, I tried something along these lines, without success:
const SerialPort = require('serialport'); async function FindDevices() { const result = (await SerialPort.list()).filter(port => new Device(port)); return result; } FindDevices().then(devices => { console.log(devices); });
Obviously I am not quite getting what I should do. So the question is: how should I represent the same intent of former FindDevices
function, using async/await or Promises? And what would be a good way of consuming that result? For example, how should I get the first found device?
Advertisement
Answer
I think you do need to filter items based on failure, so you can add catch block in mapper and then filter out the results
async function FindDevices() { const ports = await SerialPort.list(); const results = ports.map(port => { try { return new Device(port) } catch() { return null } }).filter(port => !!port); return results; }