承诺(promises)

原文:Built-in Promises 翻译:小虾米(QQ:509129)

Built-in Promises

Mongoose异步操作,像.save()和查询,返回Promises/A+ conformant promises。这意味着你可以像MyModel.findOne({}).then()MyModel.findOne({}).exec()(如果你使用co包)。

为了向后兼容,Mongoose 4返回默认mpromise承诺。

  var gnr = new Band({
      name: "Guns N' Roses",
      members: ['Axl', 'Slash']
    });

    var promise = gnr.save();
    assert.ok(promise instanceof require('mpromise'));

    promise.then(function (doc) {
      assert.equal(doc.name, "Guns N' Roses");
    });

Queries are not promises

Mongoose查询不是承诺。然而,他们也有一个.then()功能为产量和异步/等待。如果你需要一个完全成熟的承诺,用.exec()功能。

Plugging in your own Promises Library

Mongoose 4.1.0 新特性

而mpromise满足基本使用的情况下,高级用户可能想插上自己喜欢的ES6风格承诺类库bluebird,或只使用本地的ES6承诺。只需要设置mongoose.Promise到你喜欢的ES6风格承诺构造函数,mongoose会使用它。

随着本土承诺ES6Mongoose试验,bluebirdq。任何承诺类库,理论上导出一个ES6风格的构造函数应该工作,但理论往往不同于实践。如果你发现一个bug,开放式问题在GitHub上。

Promises for the MongoDB Driver

mongoose。承诺的属性集的mongoose用承诺。然而,这并不影响底层的MongoDB的驱动程序;。如果你使用了底层的驱动程序,例如Model.collection.db.insert(),你需要做一些额外的工作来改变其所承诺的类库。注意,下面的代码假定mongoose> = 4.4.4。

Last updated

Was this helpful?