Bạn có thể quảng bá toàn bộ mô-đun như vậy với 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);
Việc này chỉ cần được thực hiện ở một nơi cho một lần trong ứng dụng của bạn, không phải ở bất kỳ đâu trong mã ứng dụng của bạn.
Sau đó, bạn chỉ cần sử dụng các phương thức bình thường ngoại trừ với hậu tố Async và không chuyển các lệnh gọi lại:
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();
}
});
Vì vậy, một lần nữa, nếu bạn gọi một hàm như
foo(a, b, c, function(err, result) {
if (err) return console.log(err);
//Code
});
Phiên bản trả về lời hứa được gọi là:
fooAsync(a, b, c).then(...)
(Các lỗi chưa xuất hiện sẽ tự động được ghi lại, do đó bạn không cần phải kiểm tra chúng nếu bạn chỉ định ghi lại nó)