猫鼬方法的承诺

时间:2018-09-03 14:34:44

标签: mongoose

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

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

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

然后为了在我的应用程序中使用此方法,我通过创建一个Promise使事情变得可行。但是我的解决方案感觉很笨拙,可能不是最佳实践。我应该在UserSchema的方法中实现promise吗?我从来没有见过如此做过,这就是为什么我很想知道其他一些观点的原因。

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 :(得分:0)

猫鼬并不真正在乎您的方法返回什么。如果要使用promise而不是回调,只需返回promise:

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

一些评论:

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