猫鼬 \- 为什么我们在设置猫鼬模块时制作“mongoose.Promise = global.Promise”?

新手上路,请多包涵

我正在和猫鼬一起工作。我见过很多开发人员发出以下命令:

 mongoose.Promise = global.Promise;

然后我很好奇 mongoose.Promise 的原始值是多少。我在我的编辑器中输入了以下命令:

 const mongoose = require("mongoose");

console.log("promise: ", mongoose.Promise);

我的控制台返回给我:

promise: function Promise() { [本地代码] }

好的,那么为什么要执行命令 mongoose.Promise = global.Promise 因为 Mongoose 的承诺已经返回了本地代码?我不明白这一点,如果有人可以帮助我们理解,那就太好了,

谢谢

原文由 Webwoman 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 372
2 个回答

这是 Mongoose 5 不需要的旧示例中的遗留代码。

Mongoose 4 依赖于它自己的 promise 实现, mpromisemongoose.Promise 不一定 Promise 全局。

正如 Mongoose 4 文档 所述:

Mongoose 5.0 将默认使用原生 promises(或 bluebird,如果原生 promises 不存在)但仍支持插入您自己的 ES6 兼容 promises 库。 Mongoose 5.0 将不支持 mpromise。

尽管关于蓝鸟的说法不再正确; Mongoose 5 放弃了对没有原生承诺的 Node 版本的支持。

 mongoose.Promise = global.Promise;

如果 global.Promise 在导入 Mongoose 后被分配了另一个实现(例如 Bluebird),可能仍然需要,尽管更好的办法是更早地分配 global.Promise = Bluebird

原文由 Estus Flask 发布,翻译遵循 CC BY-SA 4.0 许可协议

猫鼬维护者在这里。如果您使用的是 Mongoose 5,请删除 mongoose.Promise = global.Promise; 。该行用于解决 Mongoose 4 中带有承诺 的以下弃用警告:

 WARNING: Mongoose: mpromise (mongoose's default promise library) is deprecated, plug in your own promise library instead

它在 Mongoose 5 中什么都不做。如果你想在 Mongoose 中使用 你自己的 promise 库,比如 Bluebird 或 Q,你应该只在 Mongoose 5 中使用 mongoose.Promise

还有一点关于 mongoose.Promise 在这里: https ://masteringjs.io/tutorials/mongoose/promise#the-mongoosepromise-property

原文由 vkarpov15 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题