Vous pouvez promettre l'ensemble du module comme ceci avec 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);
Cela ne doit être fait qu'à un seul endroit pour une seule fois dans votre application, pas n'importe où dans votre code d'application.
Après cela, vous utilisez simplement les méthodes normalement, sauf avec le suffixe Async et ne passez pas de rappel :
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();
}
});
Encore une fois, si vous appelez une fonction comme
foo(a, b, c, function(err, result) {
if (err) return console.log(err);
//Code
});
La version de retour de promesse s'appelle :
fooAsync(a, b, c).then(...)
(Les erreurs non détectées sont automatiquement enregistrées, vous n'avez donc pas besoin de les vérifier si vous ne faites que les enregistrer)