我是否有疑问将我的快递方法转换为使用异步/等待。
此刻,我的方法看起来像:
app.post('/', (req, res) => {
const body = req.body;
let hospital = new Hospital({
name: body.name,
user: req.user._id
});
hospital.save((err, hospitalCreated) => {
if (err) {
return res.status(400).json({
ok: false,
mensagem: "Error to create hospital",
errors: err
});
}
res.status(201).json({
ok: true,
hospital: hospitalCreated
});
});
}(;
作为我使用节点的新来,我尝试这样说:
app.post('/', async (req, res) => {
const body = req.body;
let hospital = new Hospital({
name: body.name,
user: req.user._id
});
await hospital.save((err, hospitalCreated) => {
if (err) {
return res.status(400).json({
ok: false,
mensagem: "Error to create hospital",
errors: err
});
}
res.status(201).json({
ok: true,
hospital: hospitalCreated
});
});
这是实现这一目标的正确方法?我必须使用尝试/捕获吗?最好的方法是什么?
谢谢
async
和await
Generator的目的是避免使用回调。如果save
方法始终返回Promise
并调用回调,您所做的可能会起作用,但是此方法破坏了生成器的全部目的。您应该删除回调,然后使用try
和catch
。
try {
await hospital.save();
res.status(201).json({
ok: true,
hospital: hospital
});
} catch (err) {
res.status(400).json({
ok: false,
mensagem: "Error to create hospital",
errors: err
});
}
我认为您可以将hospital.save
移至带有Promise Resolve的异步函数,然后使用等待响应并从承诺中获取错误,例如:
通过使用Mongoose回调更新:
function saveHospital(hospital) {
return new Promise((resolve, reject) => {
hospital.save((err, hospitalCreated) => {
if (err) {
reject(error);
}
resolve(hospitalCreated);
});
});
}
app.post('/', async (req, res) => {
const body = req.body;
let hospital = new Hospital({
name: body.name,
user: req.user._id
});
try {
const hospitalCreated = await saveHospital(hospital)
res.status(201).json({
ok: true,
hospital: hospitalCreated
});
} catch(error) {
res.status(400).json({
ok: false,
mensagem: "Error to create hospital",
errors: err
})
}
}