2017-01-11 5 views
2

私は現在、knexjs.orgを使用していますが、通常のコールバックの代わりに約束し、SQLクエリにプール接続を使用します。初めて、スムーズに動く。しかし、今私は通常、プールの接続エラーに直面しています。このようなコードknexjsリリースプール接続を約束する

knex('user_detail') 
       .select('id','full_name','phone','email') 
       .where('id', id_user) 
       .then((result) => { 
        resolve(result); 
       }) 
       .catch((error) => { 
        reject(error); 
       }) 

私は通常、エラー接続のタイムアウトとエラープールの接続を取得します。それは私が接続を解除していないが、私はこのようなコードを持っているので、多分エラーを取得し、なぜ最初、

knex('user_detail') 
       .select('id','full_name','phone','email') 
       .where('id', id_user) 
       .then((result) => { 
        resolve(result); 
       }) 
       .catch((error) => { 
        reject(error); 
       }) 
       .finally(() => { 
        knex.destroy() 
       }) 

それは最初の試みのために動作しますが、2回目の試行で失敗し、エラーを取得There is no pool defined on the current clientし、時々間違いThe pool is probably full

何が起こっているのか、私はそれをどのように解決するのか説明できますか?ありがとう。

答えて

0

最初にプール接続が不足している理由を知るには、十分な情報がありません。

あなたには、いくつかのresolve()reject()関数を呼び出している方法は、あなたが非効率的にまたは完全に間違った約束を使用している予感を与える...

あなたは完全なコード例を追加した場合どのように私ができるthe pool is probably fullエラーを取得することができます答えを編集し、より多くを助けることができる。たとえば、偶然に複数のトランザクションを作成し、解決されない場合は、プールがいっぱいになります。

2番目のコード例では、knex.destroy()を呼び出していますが、単一プール接続は破棄されませんが、knexインスタンスと使用しているプールは完全に破棄されます。

knex.destroy()の後では、そのknexインスタンスをもう使用できなくなり、データベース接続設定をもう一度指定して完全に新しいインスタンスを作成する必要があります。