Отличия от Mongoose при использовании Promise или Async / Await? - PullRequest
0 голосов
/ 14 ноября 2018

Использование ExpressJs (в качестве веб-инфраструктуры для Node.js) и Mongoose (для моделирования MongoDB) для создания веб-службы.У меня возник вопрос о том, как лучше всего обработать возвращаемый объект из некоторых методов mongoose (сохранить, найти, findByIdAndDelete и т. Д.).

Как сказано в документации mongoose, Model.prototype.save () вернет «Promise, undefined». Возвращает undefined, если используется с обратным вызовом или Promise в противном случае.Для более: https://mongoosejs.com/docs/api.html#model_Model-save

Итак, я хочу знать, какой из них мы должны использовать или в каком случае один лучше, чем другой?

Как пример использования ES7 Async / Await:

const mongoose = require('mongoose');
const Person = mongoose.model('person');

module.exports.savePerson = async (req,res) => {
  await new Person( {...req.body} )
    .save( (err, doc)=> {
      err ? res.status(400).json(err) : res.send(doc);
    });
}

Как пример использования ES6 Promise:

const mongoose = require('mongoose');
const Person = mongoose.model('person');

module.exports.savePerson = (req,res) => {
  const person = new Person( {...req.body} )

  person.save()
    .then(person => {
      res.send(person);
    })
    .catch(err => {
      res.status(400).json(err)
    });
}

1 Ответ

0 голосов
/ 14 ноября 2018

Не используйте обратный вызов, если вы хотите await это:

 module.exports.savePerson = async (req,res) => {
   try {
     const doc = await new Person( {...req.body} ).save();
     res.send(doc);
   } catch(error) {
     res.status(400).json(err);
   }
};

Так что я хочу знать, должны ли мы использовать [.thens] или [ожидает]?

Это основано на мнении, но на мой взгляд await способ более читабелен, особенно когда вам приходится ждать нескольких вещей.


Совет безопасности:Непосредственная передача данных клиентов в базу данных без проверки немного опасна.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...