【发布时间】:2018-07-19 12:58:49
【问题描述】:
我有一个关于在异步中捕获用户错误并等待的问题。
假设我有一条只为单个用户获取的路线。
routes.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;
}
}
所以无论发生什么,我都会得到一个空记录或一条记录。它仍然是成功的。 在 Promise 中,我可以拒绝 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; -
我可以在这里看到几个问题。首先,严格测试
(user === null)可能会遗漏一些错误情况,例如undefined。其次,try/catch 是不必要的并且可以消失。如果user是一个有效的用户对象之外的任何东西,只需立即抛出一个错误。它将由您上面的.catch()回调处理。
标签: javascript promise async-await ecmascript-2017