wake-up-neo.com

Wie benutzt man Mungo Promise - mongo

Kann mir jemand ein Beispiel geben, wie man ein Versprechen mit Mungo verwendet. Folgendes habe ich, aber es funktioniert nicht wie erwartet:

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

und dann in myLib hätte ich so etwas:

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;

};

Irgendwann erwarte ich, dass meine Daten vorhanden sind, aber wie kann ich darauf zugreifen oder darauf zugreifen?

43
user600314

In der aktuellen Version von Mongoose gibt die exec() -Methode ein Promise zurück, sodass Sie folgende Aktionen ausführen können:

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

Wenn Sie die Daten abrufen möchten, sollten Sie sie asynchronisieren:

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

Für weitere Informationen über Versprechen gibt es einen wunderbaren Artikel, den ich kürzlich gelesen habe: http://spion.github.io/posts/why-i-am-switching-to-promises.html

46

Mongoose verwendet bereits Versprechen, wenn Sie exec() für eine Abfrage aufrufen.

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

Mongoose 4.0 Versionshinweise

Mongoose 4.0 bringt einige aufregende neue Funktionen mit: Schemaüberprüfung im Browser, Abfrage der Middleware, Überprüfung bei Aktualisierung und Versprechen für asynchrone Vorgänge .

Mit [email protected] können Sie beliebige Versprechen einlösen

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

Ein weiteres Beispiel mit polyfilling global.Promise

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

Sie können dies also einfach später tun

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

Oder

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

P.S. Mungo 5.

Mongoose 5.0 verwendet standardmäßig native Versprechungen , sofern verfügbar, ansonsten keine Versprechungen. Sie können mit mongoose.Promise = require('bluebird'); weiterhin eine benutzerdefinierte Versprechungsbibliothek festlegen, mpromise wird jedoch nicht unterstützt.

22
Alexey B.

Ich glaube du suchst

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

Auf dieser Seite: http://mongoosejs.com/docs/promises.html

Der Titel lautet Einfügen Ihrer eigenen Promises-Bibliothek

0
Mr.Thanks