javascript - 使用 neo4j-javascript-driver 关闭会话的正确方法是什么?
问题描述
现在我正在执行writeTransactions,按照文档的建议关闭 neo4j 驱动程序会话。
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);
}
});
在这两种情况下我是否正确关闭了会话?如果不是,那么在这两种情况下关闭会话的正确方法是什么?
请帮忙,这几天一直很头疼=(
解决方案
对于您的第一种情况,您可以做一些更简单的事情:
const neo4jsession = driver.session();
try {
let result = await neo4jsession.writeTransaction(tx => tx.run("Cypher Query") )
}
catch( err } {
reject(err);
}
finally {
neo4jsession.close();
}
对于第二种情况,您可以使用相同的模式。
推荐阅读
- windows - beanstalk 会自动更新和修补它使用的 windows 图像吗?
- powershell - 跨域 Get-AdPrincipalGroupMembership 所需的最低权限?
- scala - Spark数据集中的groupByKey,沿着聚合执行自定义逻辑
- c++ - CLion 生成错误的 CMake 命令
- c# - 列表中的每个像素碰撞
- node.js - Socket.io、Node、Corodva,我没有在客户端接收器中收到消息
- php - 难以在端口 8080 上设置虚拟主机
- azure - 在 Azure 中检索 NIC 和关联的 VM
- php - 日期格式使用 dd/mm/yyyy 使用 HTML
- java - 如何在 Intellij IDEA 中显示带有参数自动提示信息的 Javadoc?