Mongoose 中的 Promises 介绍

发布于 2022-09-04 11:26:37 字数 3032 浏览 154 评论 0

Mongoose 内置了对 promises 的支持 。在 Mongoose 5 中,异步操作如 .save().find().exec()返回一个Promise,除非 您通过回调。

const Model = mongoose.model('Test', Schema({
  name: String
}));

const doc = new Model({ name: 'Neo' });

const promise = doc.save();
promise instanceof Promise; // true

const res = doc.save(function callback(err) {
  /*...*/
});
res; // undefined

 mongoose.Promise

Mongoose 有一个 Promise 属性 来设置 Mongoose 使用的 Promise 库。 例如您可以让 Mongoose 使用流行的 Bluebird Promise 库

const Bluebird = require('bluebird');

// Make Mongoose use Bluebird instead of built-in promises.
mongoose.Promise = Bluebird;

const doc = new Model({ name: 'Neo' });

const promise = doc.save();
promise instanceof Promise; // false
promise instanceof Bluebird; // true

如果您尚未升级到 Mongoose 5,您可能会在 Mongoose 4.x 中看到以下弃用警告:

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

要解决该弃用警告,您将添加以下代码:

mongoose.Promise = global.Promise;

这是因为 Mongoose 5 的重大变化之一是改用 Node.js 的原生 Promise。 Mongoose 4 在 ES6 之前发布,所以它有自己的 Promise 实现,与原生 JavaScript 的 Promise

如果你看到 mongoose.Promise = global.Promise 在使用 Mongoose 5 的代码中,请删除它。 Mongoose 5 默认使用原生 Promise,因此代码在 Mongoose 5 中什么也不做。

查询不是 Promise

尽管 save() 返回一个 Promise,像 Mongoose 的 find() 返回一只 Mongoose  Query

const query = Model.find();

query instanceof Promise; // false
query instanceof mongoose.Query; // true

Mongoose 查询是 thenables。换句话说,查询有一个 then() 函数 行为类似于 Promise then() 功能 。 因此您可以使用带有 Promise 链接 async/await

// Using queries with promise chaining
Model.findOne({ name: 'Mr. Anderson' }).
  then(doc => Model.updateOne({ _id: doc._id }, { name: 'Neo' })).
  then(() => Model.findOne({ name: 'Neo' })).
  then(doc => console.log(doc.name)); // 'Neo'

// Using queries with async/await
const doc = await Model.findOne({ name: 'Neo' });
console.log(doc.name); // 'Neo'

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

0 文章
0 评论
665 人气
更多

推荐作者

烙印

文章 0 评论 0

singlesman

文章 0 评论 0

独孤求败

文章 0 评论 0

晨钟暮鼓

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文