#node.js #express #http
#node.js #выразить #http
Вопрос:
Например, возвращает ли res.send(user)
приведенный ниже код обещание?
app.post('/users', (req, res) => {
const user = new User(req.body)
user.save().then(() => {
res.send(user)
}).catch((e) => {
res.status(400).send(e)
})
})
Ответ №1:
Нет, если вы хотите вернуть обещание, вам следует использовать асинхронные функции вместо синхронных функций. Обещания были частью языка в течение многих лет (стандартизированы и введены в ES2015) и недавно стали более интегрированными, с async и await в ES2017.
app.post('/users', async (req, res) => {
try{
const user = new User(req.body);
await user.save();
res.send(user);
} catch(e){
res.status(400).send(e);
}
}
Комментарии:
1. Вам не нужно ждать ответа.body
const user = new User( req.body)
2. Если вы используете async-await, вам не нужно вызывать тогда.
await user.save()
и строка нижеres.send(user)
3. @Abjullah асинхронное ожидание в обратном вызове не влияет на метод res.send. Если бы мы должны были вернуть что-то из этой функции, это вернуло бы обещание, но express все равно не использует его для res.send . У меня все еще нет ответа (я также предполагаю, что он не возвращает обещание, но на данный момент не может это доказать), и вы можете сделать еще один снимок