MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Node.js promette con mongoskin

Puoi promettere l'intero modulo in questo modo 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);

Questa operazione deve essere eseguita solo in un posto per una volta nell'applicazione, non in un punto qualsiasi del codice dell'applicazione.

Dopodiché, usi normalmente i metodi tranne che con il suffisso Async e non passi i callback:

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

Quindi, di nuovo, se chiami una funzione come

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

La versione con restituzione delle promesse si chiama come:

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

(Gli errori non rilevati vengono registrati automaticamente, quindi non è necessario verificarli se si desidera solo registrarli)