Обещания с методами Мангуста - PullRequest
0 голосов
/ 03 сентября 2018

Мне было интересно, каков стандартный способ возврата данных из метода Mongoose. Из примеров, которые я видел в Интернете, кажется, что наиболее распространенный способ сделать это - включить обратный вызов в качестве аргумента в метод.

Так, например, у меня может быть метод findFriends в моей модели User

UserSchema.methods.findFriends = callback => {
  ...
  return callback(null, friends);
};

Чтобы затем использовать этот метод в своем приложении, я заставил вещи работать, создав обещание. Но мое решение кажется довольно неуклюжим и, вероятно, не лучшей практикой. Должен ли я выполнять обещания в методе на UserSchema? Я никогда не видел, чтобы это делалось так, поэтому мне было любопытно узнать о некоторых других взглядах на это.

const user = User.findOne();

friendsPromise = new Promise((resolve, reject) => {
  user.findFriends((error, friends) => {
    if(! error) {
      resolve(friends);
    } else {
      reject(error);
    }
  });
});

friendsPromise.then(friends => {
  console.dir(friends);
});

1 Ответ

0 голосов
/ 03 сентября 2018

Mongoose не имеет значения, что возвращает ваш метод. Если вы хотите использовать обещания вместо обратных вызовов, просто верните обещание:

UserSchema.methods.findFriends = function() { // see text
  ...
  return promiseReturningFunction();
};

Некоторые замечания:

  • вместо использования стрелки для обозначения методов, я бы предложил использовать выражение функции (= function() { ... }). Mongoose устанавливает значение this для экземпляра документа, которое будет потеряно, если вы используете стрелочную нотацию;
  • Большинство встроенных методов Mongoose сами возвращают обещания, поэтому promiseReturningFunction может быть результатом, скажем, User.find({ friend : ... }).exec(). См. документацию для получения дополнительной информации.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...