reject возвращает пустой массив


Хочу сделать чтоб программа при варианте ID которого нет в объекте, возвращала текст 'Пользователь не найден'(reject). Но в итоге получается пустой массив.
Подскажите где совершил ошибку ?

const USERS = [
  { id: '001', name: "Алексей", age: 25 },
  { id: '002', name: "Иван", age: 28 },
  { id: '003', name: "Егор", age: 30 },
];

function fetchUser(id) {
  return new Promise ((resolve, reject) => {
    setTimeout(() => {
    const objId = USERS.filter( u => u.id == id)
    
      if (objId) {
      resolve(objId)
      }else {
      reject(new Error('Пользователь не найден'))
      }
    }, 2500)
  });
}

async function start() {
  try {
    const result = await fetchUser('004');
    console.log(result);
  } catch (error) {
    console.error(error)
  } 
}

start();


Ответы (2 шт):

Автор решения: Алексей Шиманский

Должно быть так:

if (objId.length > 0 ) {

т.к. objId это массив. И даже пустой он не даёт ни коим образом false

→ Ссылка
Автор решения: Grundy

filter всегда возвращает массив.

Проверка пустого массива в if всегда true - поэтому до reject даже не доходит.

Так как должен найтись только один объект, вместо .filter стоило использовать find

const USERS = [{
    id: '001',
    name: "Алексей",
    age: 25
  },
  {
    id: '002',
    name: "Иван",
    age: 28
  },
  {
    id: '003',
    name: "Егор",
    age: 30
  },
];

function fetchUser(id) {
  return new Promise((resolve, reject) => {
    setTimeout(() => {
      const objId = USERS.find(u => u.id == id)

      if (objId) {
        resolve(objId)
      } else {
        reject(new Error('Пользователь не найден'))
      }
    }, 2500)
  });
}

async function start() {
  try {
    const result = await fetchUser('004');
    console.log(result);
  } catch (error) {
    console.error(error)
  }
}

start();

→ Ссылка