Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/39.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Node.js pg承诺任务双重连接?_Node.js_Pg Promise - Fatal编程技术网

Node.js pg承诺任务双重连接?

Node.js pg承诺任务双重连接?,node.js,pg-promise,Node.js,Pg Promise,根据pg promise,wiki任务是在单个共享连接中进行多个查询的首选方式 虽然我理解在单个查询中使用Task是没有意义的,但我在测试中使用single query只是为了查看它在日志中的表现。获得的结果让我感到奇怪 无任务: 07:14:02 connect(user@db); useCount: 0 07:14:02 SELECT * FROM t 07:14:02 disconnect(user@db) 任务: 07:15:27 connect(user@db); useCount:

根据pg promise,wiki任务是在单个共享连接中进行多个查询的首选方式

虽然我理解在单个查询中使用Task是没有意义的,但我在测试中使用single query只是为了查看它在日志中的表现。获得的结果让我感到奇怪

无任务:

07:14:02 connect(user@db); useCount: 0
07:14:02 SELECT * FROM t
07:14:02 disconnect(user@db)
任务:

07:15:27 connect(user@db); useCount: 0
07:15:27 task/start
07:15:27 connect(user@db); useCount: 0
07:15:27 SELECT * FROM t
07:15:27 disconnect(user@db)
07:15:27 task/end; duration: .009, success: true
07:15:27 disconnect(user@db)
useCount:0
表示新的物理分配连接

在一行中进行几个这样的查询,重复该模式。每个任务包装查询显示2个分配的连接。一个用于主(?)线程,另一个用于任务本身

useCount
正确地增加,这意味着从池中重用连接。但主要的事情仍然存在——每个任务处理从连接池中分配2个连接


这是预期的行为还是我错过了smth?

由于大小原因,我无法将此作为对@vitaly-t评论的回应发布

为了让子查询重用父会话上下文,请确保调用任务方法中提供的上下文对象t

return this.db.task(t => {
  return t.any('select now()').then(
    () => t.any('select now()').then(
      () => '2 queries are executed'
    )
  )
})
我们得到了

13:30:26 connect(user@db); useCount: 0
13:30:26 task/start
13:30:26 task: select now()
13:30:26 task: select now()
13:30:26 task/end; duration: .005, success: true
13:30:26 disconnect(user@db)

您需要显示创建此日志的代码。看起来您在任务内部强制创建新连接,很可能是因为您没有使用任务提供的连接上下文。@vitaly-t您是对的。在直截了当的情况下,在我的案例中,所有工作都在单个连接中,回调方法被粘贴为一个参数。其中还有另一个包装器,它动态地选择相应的实体存储库(aka pg promise demo)。在这种模式下,ctx丢失,子查询从池中分配新的连接,这就是一直告诉您要做的;)