javascript - 使用 neo4j-javascript-driver 关闭 session 的正确方法是什么?

标签 javascript neo4j neo4j-driver

现在我正在执行writeTransactions按照文档的建议关闭 neo4j 驱动程序 session 。

但是,我还没有找到发生错误时如何处理session.close()。这可能会导致池的所有连接永远不会关闭,并且在应用程序启动几天后我收到很多这样的错误:

(node:1) UnhandledPromiseRejectionWarning:
Unhandled promise rejection (rejection id: 5725): 
Neo4jError: Connection acquisition timed out in 60000 ms.

这是驱动程序配置:

const driver = neo4j.driver(
  process.env.NEO4J_URI,
  neo4j.auth.basic(process.env.NEO4J_USER, process.env.NEO4J_PASSWORD),
  {
    maxConnectionLifetime: 60 * 60 * 1000, // 1 hour
    maxConnectionPoolSize: 300,
    encrypted: "ENCRYPTION_ON",
    trust: "TRUST_CUSTOM_CA_SIGNED_CERTIFICATES",
    trustedCertificates: [process.env.NEO4J_TRUSTED_CERTS],
    logging: {
      level: 'debug',
      logger: (level, message) => console.log('+++' + level + ' ' + message)
    }
  }
);

以下是我使用驱动程序进行事务处理的两种方式:

<强>1。使用 async/await 和 catch

const neo4jsession = driver.session();

var result = await neo4jsession.writeTransaction(tx =>
  tx.run("Cypher Query")
).catch(err => {
  try {
    neo4jsession.close();
  } finally {
    reject(err);
  }
});

neo4jsession.close();

// Do something with result if not undefined

<强>2。使用 then/catch

const neo4jsession = driver.session();

var result = neo4jsession.writeTransaction(tx =>
  tx.run("Cypher Query")
);

result.then(items => {
  neo4jsession.close();
  // do something with items
}).catch(error => {
  try {
    neo4jsession.close();
  } finally {
    reject(error);
  }
});

在这两种情况下我是否正确关闭了 session ?如果不是,那么在这两种情况下关闭 session 的正确方法是什么?

请帮忙,这几天一直很头痛=(

最佳答案

对于您的第一个案例,您可以做一些更简单的事情:

const neo4jsession = driver.session();
try {
  let result = await neo4jsession.writeTransaction(tx =>   tx.run("Cypher Query") )
} 
catch( err } {
  reject(err);
}
finally {
  neo4jsession.close();
}

您可以对第二种情况使用相同的模式。

关于javascript - 使用 neo4j-javascript-driver 关闭 session 的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55372212/

相关文章:

javascript - 变量未设置返回值

ruby-on-rails-3 - 使用 Object.const_set 创建 rails 模型

docker - 在Neo4j bolt 端口上添加基本前缀

javascript - 通过 "MATCH (n) DETACH DELETE n"运行 "neo4j-driver"不起作用

javascript - Neo4j-驱动程序:无法读取未定义的属性 'driver'

javascript - 尝试使用其 Ajax 功能时出现 Spine.js 错误

javascript - 更改鼠标光标下部分图像的颜色

javascript - 从服务器到客户端的 UTC 偏移量

java - 在 Neo4j 嵌入式 java 中通过 ID 获取节点或关系