Skip to content

Filtering an array returned from Promise

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
    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 => {

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?


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 = => {
    try {
      return new Device(port)
    } catch() {
      return null
  }).filter(port => !!port);
  return results;