如何让Hedera JS SDK在Node.js环境中优雅退出?
解决Hedera SDK JS进程无法优雅退出的问题
你的问题根源在于Hedera SDK的Client实例会维持网络连接池(比如gRPC长连接),脚本执行完成后这些连接没有被主动释放,导致Node.js进程无法自动退出。只需要在业务操作结束后主动关闭客户端,就能实现优雅退出,无需用process.exit(0)强制终止。
具体解决方法
主动关闭客户端实例
调用client.close()方法可以释放客户端持有的所有网络资源,让Node.js进程正常退出。注意这个方法是异步的,需要用await等待执行完成。用
try/catch/finally保证关闭逻辑执行
不管业务代码是成功执行还是抛出错误,都要确保client.close()被调用,避免资源泄漏。
修改后的脚本示例
import dotenv from 'dotenv'; import { Client, AccountId, PrivateKey, } from '@hashgraph/sdk'; dotenv.config(); main(); async function main() { let client; try { if (!process.env.ACCOUNT_ID || !process.env.ACCOUNT_PRIVATE_KEY) { throw new Error('请在.env文件中配置必要的密钥'); } const accountId = AccountId.fromString(process.env.ACCOUNT_ID); const accountKey = PrivateKey.fromStringECDSA(process.env.ACCOUNT_PRIVATE_KEY); client = Client.forTestnet().setOperator(accountId, accountKey); // ... 这里执行你的业务操作 ... } catch (error) { console.error('操作失败:', error); process.exit(1); // 出错时用非0状态码退出,便于外部判断执行结果 } finally { if (client) { await client.close(); // 确保客户端资源被释放 } } }
额外说明
- 如果业务代码中有异步请求(比如查询账户、提交交易),一定要用
await等待请求完成后再关闭客户端,避免请求中途中断。 - 2.37.0版本的
Client.close()已经支持优雅释放所有连接,无需额外处理其他资源。
内容的提问来源于stack exchange,提问作者bguiz
相关产品推荐
相关产品推荐

