使用 Bluebird 进行 Mongoose 承诺的正确方法是什么?

2024-04-14

我一直在阅读文档和文章,每个人似乎都描述了一起使用 Mongoose 和 Bluebird 的不同方式。甚至 Mongoose 官方文档说了些什么 http://mongoosejs.com/docs/promises.html蓝鸟文档说另一件事 http://bluebirdjs.com/docs/api/promisification.html.

根据猫鼬的说法:

mongoose.Promise = require('bluebird');

根据蓝鸟的说法:

var Promise = require("bluebird");
Promise.promisifyAll(require("mongoose"));

据我了解,如果您选择 Mongoose 方式,示例查询将如下所示:

User.findById('someId')
    .then(function(){
        // do stuff
    })
    .catch(function(err){
        // handle error
    })

但 Mongoose 文档中也提到:

猫鼬查询不是承诺。然而,它们确实有一个用于yield和async/await的.then()函数。如果您需要完整的承诺,请使用 .exec() 函数。

所以在这种情况下,是.then是否高于承诺?

如果你选择蓝鸟方式:

User.findById('someId')
    .execAsync()
    .then(function(){
        // do stuff
    })
    .catch(function(err){
        // handle error
    })

或者甚至可以跳过execAsync()并开始于findByIdAsync反而。

真的很困惑不同的文档。如果有人能对此有所启发,我将不胜感激。


选择猫鼬方式:

mongoose.Promise = require('bluebird');

那是因为猫鼬already支持 Promise(除了还接受回调);上面的代码只是替换了Mongoose自己的promise库(mpromise https://github.com/aheckmann/mpromise)由 Bluebird (它可能更快,测试得更好,并且有更多可用的实用功能)。

蓝鸟的promisify*()是为了允许不允许的代码already使用 Promise(纯粹基于回调的函数)返回 Promise。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Bluebird 进行 Mongoose 承诺的正确方法是什么? 的相关文章

  • Mongoose 嵌套架构与嵌套模型

    在模式 子文档 中嵌套模式与创建两个单独的模型并引用它们之间有什么区别 它们的性能如何 子文件 const postSchema new Schema title String content String const userSchema
  • 错误“DocumentNotFoundError:找不到查询的文档”{_id:xxx}

    我克隆了对象 preventivo 当我运行此代码时 出现以下错误 节点 24548 UnhandledPromiseRejectionWarning 未处理的承诺拒绝 拒绝ID 1 DocumentNotFoundError 在模型 pr
  • 事务 1 已在 MongoDB 中提交

    我正在尝试使用事务来更新多个文档 一种是加载表单文档 await Sheet save session 另一个是库存预订记录数组 await Stock bulkWrite const session await mongoose star
  • 伊斯坦布尔封面报告对于摩卡测试是错误的(使用 Mongoose)

    我已经尝试在伊斯坦布尔为我的申请进行封面测试 一切似乎都工作正常 但有些方法被标记为未涵盖 并且我确信 由于日志 这些功能已被涵盖 这是我想测试的代码 使用 Mongoose var mongoose require mongoose Sc
  • 不解决或拒绝承诺是否安全

    想象一下一个 Web 应用程序 其路由需要在继续之前检查是否允许用户访问给定资源 已通过身份验证 检查依赖于数据库调用 在每条路线中 我可能有 authorizeOwnership req res then function do stuf
  • Mongoose:find() 忽略重复值

    我有一只 聊天 猫鼬Schema它具有以下属性 const schema mongoose Schema recipient type mongoose Types ObjectId required true ref User sende
  • MongoError: 使用 mongoosejs 连接 mLab 时数据库名称不能包含字符 ' '

    这是我的JS代码 var mongoose require mongoose mongoose connect mongodb myUsername email protected cdn cgi l email protection 61
  • Mongoose/Mongodb更新返回值及错误处理

    我对 Mongodb update 的返回值以及如何处理它的错误有点困惑 我使用 Node js Express js 和 Mongoose js 作为我的 Mongodb 驱动程序 当我浏览许多教程时 我看到的错误处理的唯一方法是 示例
  • mongodb 中的条件更新

    我有以下架构 需要进行更新 详细信息如下 不知道该怎么做 UserPromo new Schema sendFBInvite earnedIntros type Number default 0 earningActionCounter t
  • 在猫鼬的整个应用程序中共享数据库连接

    使用最新的 mongoose 更新 您不能再像我以前那样进行用户建模 我需要在整个应用程序中共享相同的数据库连接 https github com LearnBoost mongoose issues 1249 https github c
  • 错误:集合方法聚合是同步的

    我正在尝试以下代码 const Conn mongoose createConnection mongodb 127 0 0 1 27017 db const addresses Conn collection users aggregat
  • 如何在没有 Express 的情况下通过 Mongoose 与 MongoDB 交互?

    我想要一个可以牢固掌握 CRUD 操作如何工作的环境 到目前为止 我一直在使用views看看数据是什么样子 但由于明显缺乏灵活性 这种方法并不是那么有洞察力 这就像在黑暗中开车一样 现在我希望能够通过 Mongoose 提供的功能来处理 M
  • Mongoose MongoDB:更新嵌套数组中的对象

    我有以下架构 var UserSchema new Schema emp no Number skills skill type Schema Types ObjectId ref Skill startDate type Date 然后我
  • mongoDB 对嵌套对象数组的聚合查找

    我有一个如下所示的集合 但我无法执行 lookup 并按开始时的方式返回它 但包含填充的字段 我已经对我想要填充的字段发表了评论 代理 missions clients client title Tourn e libre agent 5d
  • $lookup mongodb 中的 $project

    我有一个查询 使用 lookup https docs mongodb com manual reference operator aggregation lookup 加入 两个模型 之后我使用 project https docs mo
  • FindAndUpdate 如何检查文档是否真的更新

    想象一下以下模型 var Office id 1 name My Office branches adddress Some street that avenue isPrincipal true adddress Another addr
  • Nest.js - 在猫鼬模式中创建索引

    如何使用 Nest js 在猫鼬模式中创建属性索引 我尝试添加索引作为属性选项 但索引尚未创建 Schema export class Schema extends Document Prop id string Prop required
  • Mongoose 限制/偏移量和计数查询

    查询性能有点奇怪 我需要运行一个查询来计算文档总数 并且还可以返回一个可以限制和偏移的结果集 所以 我总共有 57 个文档 用户想要 10 个文档偏移 20 我可以想到两种方法来做到这一点 首先是查询所有 57 个文档 以数组形式返回 然后
  • 使用 Bluebird.js 和 Twitter 流的 Promise 和流

    我对 Promises 和 Node 非常陌生 并且对在流中使用 Promise 感到好奇 我可以承诺直播吗 使用 Bluebirdjs 和 Twit 模块 我有以下内容 var Twit require twit var Promise
  • mongoDB白名单IP

    我看到类似的帖子 但没有一个能帮助我解决我的问题 在学习了从头开始构建 MERN 应用程序的 Udemy 教程后 我陷入了 mongoose 连接的困境 这是我的 index js 代码 const express require expr

随机推荐

  • 如何使用“typedef NS_ENUM”在一个 .h 文件中定义多个变量类型

    我用过typedef NS ENUM重新组织旧代码中的数据常量 使用方法在这里找到 https stackoverflow com a 42009056 2348597 every typedef被声明在一个单一的 h可以导入到项目中任何类
  • Rails 会话中存储的对象变成了字符串?

    通常我不会在 Rails 会话中存储对象 但我正在使用需要此功能的库 我遇到了一个非常奇怪的问题 其中存储的对象在重定向后显示为字符串 为了重现 我创建了一个示例 Rails 4 1 应用程序 rails new session test
  • 如何编写从配置文件中获取值的自定义正则表达式验证器?

    我必须在模型中对用户名属性使用正则表达式验证器 我从配置文件中获取这个正则表达式 RegularExpression UsernameValidationExpression UsernameValidationExpression val
  • 如何在打字中安装express?

    我正在尝试在我的应用程序中使用expressjs 安装后使用typings install express ambient save I run tsc 但我收到两个错误 types main ambient express index d
  • 使用 OpenCV 对非正面图像进行人脸检测

    我正在尝试使用 opencv 来检测人脸 脸部不是正面 相机从侧面拍摄脸部 因此只能看到一只眼睛和部分嘴巴 我尝试了具有多种配置的 HaarDetectObjects 但没有获得任何好处 我改变了级联并进行了测试 haarcascade f
  • 在折线图中的特定点添加标记

    我正在绘制一个绘图线图 并希望使用标记突出显示线图上的特定点 其中数据框中的另一列不是 NA 此外 当我将鼠标悬停在绘图上时 我只想查看位于标记点上的 y 值 而不是绘图的其余部分 这是一个可重现的示例 到目前为止我已经尝试做到这一点 li
  • 使用 Python 检测 OpenCV 中的线条和形状

    我一直在使用 OpenCV cv2 并检测线条和形状 假设我女儿画了一幅图画 如下所示 我正在尝试编写一个Python脚本来分析绘图并将其转换为硬线条 形状 例如 话虽这么说 我已经安装了 opencv 并尝试使用它 但除了能够在图像中绘制
  • 如何设置扭曲的日志记录级别?

    我正在使用带有twisted的autobahn包 它会在每次连接到websocket时显示调试消息 我尝试将日志记录级别切换为信息但没有成功 import logging logging basicConfig level logging
  • 如何通过 Java 运行我的 haskell 函数

    假设我有一个 haskell 函数add in math hs 我怎样才能运行add通过Java程序运行函数并将输出存储为变量 也许像下面这样 public int runHaskell String haskellFile int out
  • 如何在 MATLAB 中编写向量化函数

    我刚刚学习MATLAB 我发现很难理解循环与矢量化函数的性能因素 在我之前的问题中 MATLAB 中的嵌套 for 循环非常慢 预分配 https stackoverflow com q 7811239 518169我意识到使用向量化函数与
  • 从传递给 C# 的 F# 列表中检索项目

    我在 C 中有一个在 F 中调用的函数 将其参数传递到Microsoft FSharp Collections List 如何从 C 函数中的 F 列表中获取项目 EDIT 我找到了一种 函数式 风格的方式来循环它们 并且可以将它们传递给如
  • docker-compose 构建镜像或构建上下文[关闭]

    Closed 这个问题不符合堆栈溢出指南 help closed questions 目前不接受答案 我想构建自定义 Dockerfile 但我收到以下消息 gt Starting build app ERROR The Compose f
  • iText 列表项或 JTextArea 中的行间距

    我需要在 GUI 中同步 PDF 列表项和 JTextArea 的行距 我可以通过调整其中之一来做到这一点 在列表项 或 JTextArea 超过一行 在 JTextArea 中将换行设置为 true 之前 这一切都运行良好 我可以调整两个
  • 根据属性检查 firebase 是否存在现有对象,防止重复

    我想检查我的 firebase 看看我是否已经存储了一个与两个属性匹配的对象 为了将这个问题放在上下文中 想象一个仅存储歌曲的应用程序 具有 艺术家 和 歌曲名 等属性 如下所示 var wishlist new Firebase http
  • 在 Windows 10 家庭版 docker-compose.yml 文件中设置卷

    尝试设置 docker 以便当我在 Windows 计算机上更改项目文件时 它们会在我的 docker 容器中更新 从这个问题 https stackoverflow com questions 41925212 changing my p
  • 如何按日期在 R 中对大型数据框 (ffdf) 进行子集化?

    我正在尝试按日期对 FFDF 进行子集化 下面 我使用普通数据框成功创建了这样的子集 但我需要一些帮助才能将其应用到 FFDF 我的尝试以及错误消息都列在代码注释中 提前谢谢了 Create a normal data frame in p
  • 如何保持片段视图状态?

    我对碎片系统有疑问 我有两个片段 例如A and B 如果我搬家A to B Navigation findNavController v navigate R id B Now A片段 onDestroyView 被称为我知道这是正常的
  • 使用 Imagick 将图像从 RGB 转换为 CMYK

    我正在尝试将 RGB 图像转换为 CMYK 因为它们需要打印 我正在使用这段代码
  • JavaScript 中 /// 是什么意思?

    双正斜杠 是 JavaScript 中的注释 但是三重正斜杠是什么意思 意思是 我问的原因是当我删除具有以下内容的行时代码会中断 这让我相信 不是评论 可能是一个参考指令 https stackoverflow com questions
  • 使用 Bluebird 进行 Mongoose 承诺的正确方法是什么?

    我一直在阅读文档和文章 每个人似乎都描述了一起使用 Mongoose 和 Bluebird 的不同方式 甚至 Mongoose 官方文档说了些什么 http mongoosejs com docs promises html蓝鸟文档说另一件