使用不带回调的猫鼬实例方法

时间:2019-01-21 16:12:55

标签: node.js mongodb mongoose

我已经浏览了一些文档和Google,并尝试了几种代码解决方案,但由于无法对其进行排序,所以就可以了。

我在做什么

我一直在使用猫鼬实例方法来包装默认的猫鼬.save功能(提供默认值,搜索索引等)。我是async/await语法的忠实拥护者,因此没有使用过猫鼬提供的回调,而是返回了一个Promise。像这样:

schema.methods.customSave = async function(options, cb) {
  console.log(typeof options) // will talk about later, in problem statement
  // do stuff
  let results = await customLogic()
  return results
}

现在的问题是...调用此函数的方式是:

let options = { // properties here }
instance.customSave(options)

然后,您的选项实际上不会被传递。第一个代码块中的日志将返回function。为了通过并接收您的选项,您必须执行以下操作:

instance.customSave(options, false)

我还尝试在原始实例方法声明中将cb的值默认为默认值,我认为这样做是可行的,因为这就像将回调传递给该方法的每次调用一样,但这也没有用。如下所示:

schema.methods.customSave = async function(options, cb = () => { return }) {
...
}

我想做什么

我宁愿完全不用担心回调就可以调用该方法(因为我不使用它)。所以我想让它工作:

let options = { // properties here }
instance.customSave(options)

,第一个代码块中的日志将返回object。有人知道怎么用猫鼬吗?

0 个答案:

没有答案