Можете да обещаете целия модул така с 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);
Това трябва да се направи само на едно място за един път във вашето приложение, а не навсякъде в кода на приложението.
След това просто използвате методи нормално, с изключение на суфикса Async и не предавате обратни извиквания:
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();
}
});
Така че отново, ако извикате функция като
foo(a, b, c, function(err, result) {
if (err) return console.log(err);
//Code
});
Версията, връщаща обещание, се нарича така:
fooAsync(a, b, c).then(...)
(Неуловените грешки се регистрират автоматично, така че не е необходимо да ги проверявате, ако само ще регистрирате)