sql >> Base de Datos >  >> NoSQL >> MongoDB

Node.js promete con mongoskin

Puede prometer todo el módulo así con bluebird:

var Promise = require("bluebird");
var mongoskin = require("mongoskin");
Object.keys(mongoskin).forEach(function(key) {
  var value = mongoskin[key];
  if (typeof value === "function") {
    Promise.promisifyAll(value);
    Promise.promisifyAll(value.prototype);
  }
});
Promise.promisifyAll(mongoskin);

Esto solo debe hacerse en un lugar por una vez en su aplicación, no en ninguna parte del código de su aplicación.

Después de eso, solo usa los métodos normalmente, excepto con el sufijo Async y no pasa las devoluciones de llamada:

req.db.collection('users').find().toArrayAsync()
  .then(function(doc) {
    if (doc) {
      return req.db.collection('users').find().toArrayAsync();
    }
  })
  .then(function(doc) {
    if (doc) {
      return req.db.collection('users').find().toArrayAsync();
    }
  })
  .then(function(doc) {
    if (doc) {
      return req.db.collection('users').find().toArrayAsync();
    }
  });

De nuevo, si llamas a una función como

foo(a, b, c, function(err, result) {
    if (err) return console.log(err);
    //Code
});

La versión que devuelve la promesa se llama así:

fooAsync(a, b, c).then(...)

(Los errores no detectados se registran automáticamente, por lo que no necesita verificarlos si solo va a registrarlos)