MongoDB
 sql >> Base de Dados >  >> NoSQL >> MongoDB

Node.js promete com mongoskin


Você pode prometer o módulo inteiro assim com o 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);

Isso só precisa ser feito em um lugar por uma vez em seu aplicativo, não em qualquer lugar no código do aplicativo.

Depois disso, você apenas usa métodos normalmente, exceto com o sufixo Async e não passa retornos de chamada:
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();
    }
  });

Então, novamente, se você chamar uma função como
foo(a, b, c, function(err, result) {
    if (err) return console.log(err);
    //Code
});

A versão de retorno de promessa é chamada assim:
fooAsync(a, b, c).then(...)

(Erros não capturados são registrados automaticamente, então você não precisa verificá-los se for apenas registrá-los)