2017-01-11 60 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() 
       }) 

它适用于第一次尝试,但在第二次尝试失败,并得到一个错误There is no pool defined on the current client和有时错误The pool is probably full

能有人向我解释这是怎么回事,我该如何解决呢?谢谢。

回答

0

没有问题足够的信息能够告诉你为什么要在第一时间不多了池中的连接。

你调用一些resolve()reject()功能的方式给您正在使用的承诺低效或完全错误的预感......

如果您添加完整的代码示例你怎么样能够得到the pool is probably full错误,我可以编辑答案并能够帮助更多。例如由事故未解决的池将填补创建多个交易。

在你调用knex.destroy()不破坏单池连接,而是完全第二个代码示例破坏knex实例,您正在使用的池。

因此在knex.destroy()之后,您将无法再使用该实例,并且必须通过重新提供数据库连接配置来创建全新的实例。