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

部署以太坊智能合约时遇未处理Promise拒绝错误求助

解决Deploy.js合约部署的UnhandledPromiseRejection错误

这个错误的核心是你没有处理异步操作中可能出现的异常,导致Promise被拒绝时没有对应的捕获逻辑。下面给你两种直接有效的修复方式:

方法一:在async函数内部用try/catch包裹操作

把所有可能抛出异常的异步代码放在try块里,用catch捕获错误,同时加上finally确保进程能正常退出:

const HDWalletProvider=require('@truffle/hdwallet-provider')
const Web3=require('web3')
const {interface,bytecode}=require('./compile')

const provider=new HDWalletProvider(
    'MY SECRET KEY',
    'https://eth-goerli.g.alchemy.com/v2/UVud9ZoAdGEt747J95NyOyUsS4bre3Oe'
);
const web3=new Web3(provider);

const deploy =async ()=>{
    try {
        const accounts= await web3.eth.getAccounts();
        console.log('Attempting to deploy from Account',accounts[0]);
        const result= await new web3.eth.Contract(JSON.parse(interface))
            .deploy ({data:bytecode})
            .send({gas:'1000000', from:accounts[0]});

        console.log('合约部署成功,地址:', result.options.address);
    } catch (error) {
        console.error('部署失败,错误详情:', error);
    } finally {
        // 停止provider引擎,避免进程挂起
        provider.engine.stop();
    }
};
deploy();

方法二:在调用deploy时添加.catch()处理

如果你不想修改deploy函数内部,可以在调用它的时候直接追加catch方法捕获错误:

const HDWalletProvider=require('@truffle/hdwallet-provider')
const Web3=require('web3')
const {interface,bytecode}=require('./compile')

const provider=new HDWalletProvider(
    'MY SECRET KEY',
    'https://eth-goerli.g.alchemy.com/v2/UVud9ZoAdGEt747J95NyOyUsS4bre3Oe'
);
const web3=new Web3(provider);

const deploy =async ()=>{
    const accounts= await web3.eth.getAccounts();
    console.log('Attempting to deploy from Account',accounts[0]);
    const result= await new web3.eth.Contract(JSON.parse(interface))
        .deploy ({data:bytecode})
        .send({gas:'1000000', from:accounts[0]});

    console.log('合约部署成功,地址:', result.options.address);
    provider.engine.stop();
};
// 追加catch处理错误
deploy().catch(error => {
    console.error('部署失败,错误详情:', error);
    provider.engine.stop();
});

额外说明

  • 添加错误捕获后,你能看到具体的拒绝原因(比如gas额度不足、钱包密钥错误、网络连接失败等),方便进一步排查问题。
  • 必须调用provider.engine.stop(),否则Node.js进程会因为HDWalletProvider的持久连接一直处于挂起状态,无法自动退出。

内容的提问来源于stack exchange,提问作者33_KAWALE SUSHANT

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 19:35:23