You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让Hedera JS SDK在Node.js环境中优雅退出?

解决Hedera SDK JS进程无法优雅退出的问题

你的问题根源在于Hedera SDK的Client实例会维持网络连接池(比如gRPC长连接),脚本执行完成后这些连接没有被主动释放,导致Node.js进程无法自动退出。只需要在业务操作结束后主动关闭客户端,就能实现优雅退出,无需用process.exit(0)强制终止。

具体解决方法

  1. 主动关闭客户端实例
    调用client.close()方法可以释放客户端持有的所有网络资源,让Node.js进程正常退出。注意这个方法是异步的,需要用await等待执行完成。

  2. 用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 16:07:30