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();