未处理的承诺拒绝警告

时间:2021-05-29 03:26:10

标签: javascript solidity web3js

const Web3 = require('web3');
const fs = require('fs')
const web3 = new Web3("http://localhost:7545");


const contract_address = "0x7484d32e891817702c5d7c764dBF7e592000b415";


async function web3Contract() {
    const contract_abi = fs.readFileSync('./build/contracts/Bottle.json', 'utf8')
    const Bottle = await new web3.eth.Contract(JSON.parse(contract_abi).abi, contract_address);
    Bottle.methods.setName("Palm").send();
    Bottle.methods.getGreeting().call();
}

async function run() {
    try {
        await web3Contract();
    } catch (err) {
        console.log('Your error is this - ' + err);
    }    
}

run();

我收到错误“UnhandledPromiseRejectWarning”。我在谷歌上搜索了几个小时,似乎无法解决这个问题。请指导我正确的方向。谢谢。

1 个答案:

答案 0 :(得分:0)

指针 1:不要将 JSON.parse(contract_abi).abi 评估为参数。如果您这样做,则无法检查它是什么 - 它可能会导致错误。更好:

const contract_abi = fs.readFileSync('./build/contracts/Bottle.json', 'utf8');
const abi = JSON.parse(contract_abi).abi;
console.log( abi); // do you get this far?
const Bottle = await new web3.eth.Contract(abi, contract_address);

指针 2:调试时不要记录错误对象的字符串值 - 您只会得到它的 toString() 结果,它看起来与记录 error.message 相同。更好:

 console.log('Your error is this - ', err);

提供 err 作为第二个参数会导致 node 记录错误对象的其他属性,包括提供跟踪信息的 error.stack