У меня есть вопрос об отлове ошибки пользователя в асинхронном режиме и ожидании.
Допустим, у меня есть маршрут, который извлекается только для одного пользователя.
маршруты.js
routes.get('/getuserbyid/:id', (req, res) => {
const id = req.params.id;
accountController.getById(id)
.then((result) => {
res.json({
confirmation: 'success',
result: result
});
})
.catch((error) => {
res.json({
confirmation: 'failure',
error: error
});
});
});
У меня есть контроллер, который получает запрос. accountController.js
export const getById = async (id) => {
try {
const user = await users.findOne({ where: {
id: id
}});
if (user === null) {
return 'User does not exist';
}
return user;
} catch (error) {
return error;
}
}
Поэтому, что бы ни случилось, я получаю либо нулевую, либо одну запись. Это все еще успех. В промисах я могу отклонить null, чтобы он отображался в блоке catch на маршруте. Теперь что с асинхронностью и ожиданием. Как я могу добиться того же, сделав нуль в блоке ошибок?
export const getById = (id) => {
return new Promise((resolve, reject) => {
users.findOne({ where: {
id: id
}})
.then((result) => {
if (result === null) {
reject('User does not exit');
}
resolve(result);
})
.catch((error) => {
reject(error);
});
});
}
throw null;
- person Aluan Haddad   schedule 08.02.2018(user === null)
, вероятно, отсутствуют некоторые случаи ошибок, напримерundefined
. Во-вторых, try/catch не нужен и может исчезнуть. Еслиuser
является чем-то другим, кроме действительного пользовательского объекта, просто выдайте ошибку прямо здесь и сейчас. Это будет обработано вашим обратным вызовом.catch()
выше. - person greim   schedule 08.02.2018