【问题标题】:Promises with Mongoose methods使用 Mongoose 方法的 Promise
【发布时间】:2019-02-08 15:10:59
【问题描述】:

我想知道从 Mongoose 方法返回数据的标准方法是什么。从我在网上看到的示例来看,一种常见的方法似乎是在方法中包含一个回调作为参数。

例如,我的用户模型上可能有一个 findFriends 方法

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

为了在我的应用程序中使用这个方法,我已经通过创建一个 Promise 来完成工作。但我的解决方案感觉很笨拙,可能不是最佳实践。我应该在 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);
});

【问题讨论】:

    标签: mongoose


    【解决方案1】:

    Mongoose 并不真正关心您的方法返回什么。如果你想使用 Promise 而不是回调,只需返回一个 Promise:

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

    一些备注:

    • 我建议使用函数表达式(= function() { ... }),而不是对方法使用箭头符号。 Mongoose 将 this 的值设置为文档实例,如果使用箭头符号,则会丢失;
    • 大多数内置的 Mongoose 方法本身都会返回 Promise,因此 promiseReturningFunction 可能是 User.find({ friend : ... }).exec() 的结果。请参阅the documentation 了解更多信息。

    【讨论】:

      猜你喜欢
      • 2018-02-11
      • 2019-06-18
      • 2020-09-13
      • 2023-03-08
      • 2019-04-17
      • 2018-09-09
      • 1970-01-01
      • 2015-07-22
      • 1970-01-01
      相关资源
      最近更新 更多