48 votes

Comment utiliser la promesse de mangouste - mongo

Quelqu'un peut-il me donner un exemple sur la façon d'utiliser une promesse avec la mangouste. Voici ce que j'ai, mais cela ne fonctionne pas comme prévu:

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

et puis dans myLib, j'aurais quelque chose comme ça :

 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;

};

À un moment donné, je m'attends à ce que mes données soient présentes, mais comment puis-je y accéder ou y accéder ?

47voto

Dans la version actuelle de Mongoose, la exec() renvoie une promesse, vous pouvez donc effectuer les opérations suivantes :

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

Ensuite, lorsque vous souhaitez obtenir les données, vous devez les rendre asynchrone :

 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.
         });
});

Pour plus d'informations sur les promesses, il y a un article merveilleux que j'ai lu récemment : http://spion.github.io/posts/why-i-am-switching-to-promises.html

30voto

konsumer Points 955

Mongoose utilise déjà des promesses, lorsque vous appelez exec() sur une requête.

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

5voto

deedubs Points 253

je crois que tu cherches

 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;

};

0voto

Mr.Thanks Points 177

Sur cette page : http://mongoosejs.com/docs/promises.html

Le titre est en train de brancher votre propre bibliothèque de promesses

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X