簡體   English   中英

使用neo4j-javascript-driver關閉會話的正確方法是什么?

[英]What is the proper way to close a session using 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.使用異步/等待並捕獲

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();
}

對於第二種情況,您可以使用相同的模式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM