青い鳥を使用できPromise.promisifyAll
(およびPromise.promisify
任意のオブジェクトへの約束準備メソッドを追加します)。
var Promise = require('bluebird');
// Somewhere around here, the following line is called
Promise.promisifyAll(connection);
exports.getUsersAsync = function () {
return connection.connectAsync()
.then(function () {
return connection.queryAsync('SELECT * FROM Users')
});
};
そして、このように使用します:
getUsersAsync().then(console.log);
または
// Spread because MySQL queries actually return two resulting arguments,
// which Bluebird resolves as an array.
getUsersAsync().spread(function(rows, fields) {
// Do whatever you want with either rows or fields.
});
ディスポーザーの追加
ブルーバードは、それがの助けを借りて、終わった後に、安全な接続を処分することができ、そのうちの一つは、ディスポーザーで、機能の多くをサポートPromise.using
してPromise.prototype.disposer
。これが私のアプリの例です:
function getConnection(host, user, password, port) {
// connection was already promisified at this point
// The object literal syntax is ES6, it's the equivalent of
// {host: host, user: user, ... }
var connection = mysql.createConnection({host, user, password, port});
return connection.connectAsync()
// connect callback doesn't have arguments. return connection.
.return(connection)
.disposer(function(connection, promise) {
//Disposer is used when Promise.using is finished.
connection.end();
});
}
次に、次のように使用します。
exports.getUsersAsync = function () {
return Promise.using(getConnection()).then(function (connection) {
return connection.queryAsync('SELECT * FROM Users')
});
};
これにより、promiseが値で解決される(またはで拒否されるError
)と、接続は自動的に終了します。