Возвращает ли Express.js http-ответ возвращает обещание по умолчанию

#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 . У меня все еще нет ответа (я также предполагаю, что он не возвращает обещание, но на данный момент не может это доказать), и вы можете сделать еще один снимок