node.js - 是否使用 exec() 执行猫鼬?
问题描述
我想知道在这种情况下执行我的 Mongoose 查询的最佳方法是什么:
// 1
AgentLogs.find(searchParams)
.sort({ timestamp: -1 })
.exec(function (err, docs) {
if (err) return res.status(500).send(err);
res.json(docs);
})
.lean();
// 2
AgentLogs.find(searchParams, (err, docs) => {
if (err) return res.status(500).send(err);
res.json(docs);
})
.sort({ timestamp: -1 })
.lean();
我“更喜欢”第 2 条,但除了我的感觉之外,还有什么更好或“正确”的方式?还是没关系?
解决方案
在大多数用例中,这两个选项都将以类似的方式工作。
出于某种原因,猫鼬使用了自己的类似 Promise 的实现,但不是真正的 Promise。这意味着查询实际上是thenable并且也可以与 async/await 一起使用,但这些不是真正的Promise
.
当你调用.exec()
它时,它会强制 mongoose 返回一个真实的、完全成熟的 Promise 对象。
这两种方法的主要区别在于,exec
如果发生错误,一种方法可以为您提供更多详细信息和上下文信息——这就是推荐使用的主要原因exec
。
在 mongoose 文档中有一篇与此主题相关的单独文章。
推荐阅读
- python - Python中的函数“/”参数
- html - Bootstrap Pill Navigation 无法在主机上运行
- python - 通过子进程取消大python对象
- ruby-on-rails - 带有docker的Gitlab runner不会在本地缓存rails gem
- algorithm - kd-tree:重复键和删除
- html - 如何更改引导 html 中的图像位置
- .htaccess - 如何在 php 中使用 htaccess 更改已请求的 GET 数据来更改已经工作的 GET 查询
- javascript - 在 React Native 中按类别对对象元素进行分组
- python - 你能请人解释一下 3-d 数组切片吗?
- python - 如何检查列表中字符串中的2个值是否不相同