第三版的generic-pool问题,按照里面的example执行的代码,但是很郁闷的是代码不能运行,单步的话,也只是到resourcePromise.then(function(client)
就不执行了,这是为什么那?
使用的模块地址:https://github.com/coopernurs...
全部代码如下:
var genericPool = require('generic-pool');
var DbDriver = require('mysql');
/**
* Step 1 - Create pool using a factory object
*/
const factory = {
create: function(){
return new Promise(function(resolve, reject){
var client = DbDriver.createPool({
host:'localhost',
user : 'root',
password : 'root',
database : 'world'});
client.on('connected', function(){
resolve(client)
})
})
},
destroy: function(client){
return new Promise(function(resolve){
client.on('end', function(){
resolve()
})
client.disconnect()
})
}
}
var opts = {
max: 10, // maximum size of the pool
min: 2 // minimum size of the pool
}
var myPool = genericPool.createPool(factory, opts);
/**
* Step 2 - Use pool in your code to acquire/release resources
*/
// acquire connection - Promise is resolved
// once a resource becomes available
var resourcePromise = myPool.acquire();
resourcePromise.then(function(client) {
console.log('in ');
client.query("select * from city", [], function(err,result) {
console.log(err);
console.log(result);
// return object back to pool
myPool.release(client);
});
})
.catch(function(err){
// handle error - this is generally a timeout or maxWaitingClients
// error
});
/**
* Step 3 - Drain pool during shutdown (optional)
*/
// Only call this once in your application -- at the point you want
// to shutdown and stop using this pool.
myPool.drain(function() {
myPool.clear();
});
mysql の公式ドキュメントを参照してください: https://github.com/mysqljs/mysql
リーリーresourcePromise.thenが入力できない場合は、resolveまたはrejectが実行されていないことを意味します。このようにして、ファクトリの作成時にresolve(client)が実行されていないことを確認できます。
リーリーclient.on('connected' は実行されていません) を実行してください。次に mysql.js のドキュメントを確認すると、データベースに接続するために
client.connect(function(err){} となっています。解決策は次のとおりです: