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);
これは、アプリケーションコードのどこでもなく、アプリケーションの1か所で一度だけ実行する必要があります。
その後は、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(...)
(キャッチされなかったエラーは自動的にログに記録されるため、ログに記録するだけの場合はチェックする必要はありません)