web-dev-qa-db-ja.com

mongoose Promiseの使用方法-mongo

誰かが私にマングースでPromiseを使用する方法の例を教えてもらえますか?ここに私が持っているものがありますが、期待どおりに機能しません:

app.use(function (req, res, next) {
  res.local('myStuff', myLib.process(req.path, something));
  console.log(res.local('myStuff'));
  next();
});

そしてmyLibでは、このようなものがあります:

exports.process = function ( r, callback ) {
  var promise = new mongoose.Promise;
  if(callback) promise.addBack(callback);

  Content.find( {route : r }, function (err, docs) {
     promise.resolve.bind(promise)(err, docs);

  });

  return promise;

};

ある時点でデータが存在することを期待していますが、どのようにしてデータにアクセスしたり、取得したりできますか?

43
user600314

現在のバージョンのMongooseでは、exec()メソッドはPromiseを返すため、次のことができます。

exports.process = function(r) {
    return Content.find({route: r}).exec();
}

次に、データを取得する場合は、非同期にする必要があります。

app.use(function(req, res, next) {
     res.local('myStuff', myLib.process(req.path));
     res.local('myStuff')
         .then(function(doc) {  // <- this is the Promise interface.
             console.log(doc);
             next();
         }, function(err) {
             // handle error here.
         });
});

約束の詳細については、最近読んだ素晴らしい記事があります: http://spion.github.io/posts/why-i-am-switching-to-promises.html

46

クエリでexec()を呼び出すと、Mongooseはすでにpromiseを使用します。

var promise = Content.find( {route : r }).exec();
29
konsumer

Mongoose 4.0リリースノート

Mongoose 4.0には、ブラウザでのスキーマ検証、クエリミドルウェア、更新時の検証、非同期操作の約束など、いくつかのエキサイティングな新機能が搭載されています。

[email protected]を使用すると、必要な約束を使用できます

_var mongoose = require('mongoose');
mongoose.Promise = require('bluebird');
_

ポリフィルglobal.Promiseの別の例

_require('es6-promise').polyfill();
var mongoose = require('mongoose');
_

だから、あとでできる

_Content
  .find({route : r})
  .then(function(docs) {}, function(err) {});
_

または

_Content
  .find({route : r})
  .then(function(docs) {})
  .catch(function(err) {});
_

追伸 Mongoose 5.

Mongoose 5.0は、デフォルトでネイティブプロミスを使用する場合使用可能であれば、それ以外の場合はプロミスを使用しません。 mongoose.Promise = require('bluebird');を使用してカスタムpromiseライブラリを設定できますが、mpromiseはサポートされません。

22
Alexey B.

あなたが探していると思う

exports.process = function ( r, callback ) {
  var promise = new mongoose.Promise;
  if(callback) promise.addBack(callback);

  Content.find( {route : r }, function (err, docs) {
     if(err) {
       promise.error(err);
       return;
     }
     promise.complete(docs);

  });

  return promise;

};
5
deedubs

このページ: http://mongoosejs.com/docs/promises.html

タイトルは独自のPromisesライブラリのプラグイン

0
Mr.Thanks