48

マングースで 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;

};

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

4

6 に答える 6

48

現在のバージョンの 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.
         });
});

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

于 2014-01-08T03:46:42.990 に答える
30

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

var promise = Content.find( {route : r }).exec();
于 2014-05-09T08:56:20.577 に答える
5

私はあなたが探していると信じています

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;

};
于 2012-01-31T14:32:05.507 に答える
0

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

タイトルはPlugging in your own Promises Libraryです

于 2017-01-12T04:14:17.043 に答える
-1

次のように bluebird Promise ライブラリを使用します。

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

User.findAsync({}).then(function(users){
  console.log(users)
})

これは、次のように使用できます。

User.findAsync({}).then(function(users){
      console.log(users)
    }).then(function(){
      // more async stuff
    })
于 2015-08-11T18:58:31.150 に答える