Je kunt de hele module zo beloven met 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);
Dit hoeft maar één keer op één plaats in uw applicatie te gebeuren, niet ergens in uw applicatiecode.
Daarna gebruik je gewoon methoden, behalve met het Async-achtervoegsel en geef je geen callbacks door:
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();
}
});
Dus nogmaals, als je een functie aanroept zoals
foo(a, b, c, function(err, result) {
if (err) return console.log(err);
//Code
});
De belofte-terugkerende versie heet als volgt:
fooAsync(a, b, c).then(...)
(Niet-opgevangen fouten worden automatisch gelogd, dus u hoeft ze niet te controleren als u ze alleen gaat loggen)