首页 > 解决方案 > 此 Web3.js 调用没有结果

问题描述

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


const contract_address = "0x7484d32e8911817702c5d7c764dBF7e592000b415";


async function web3Contract() {
    const contract_abi = fs.readFileSync('./build/contracts/Bottle.json', 'utf8')
    const abi = JSON.parse(contract_abi).abi;
    // console.log(abi);
    const Bottle = await new web3.eth.Contract(abi, contract_address);
    const accounts = await web3.eth.getAccounts();
    await Bottle.methods.setName("Palm").send({from:accounts[0]});
    const greeting = await Bottle.methods.getGreeting().call();

    console.log(greeting);
    });
}

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

run(); 

getGreeting().call() 给了我这个错误。我尝试了许多不同的方法并被困在这里几个小时。不知道该怎么做。https://gyazo.com/81970d03c1380cd513998f25deef9e40

标签: javascriptsolidityweb3js

解决方案


您错误地组合await了回调函数(在您的情况下function(result) {})。

由于您使用的是await,它永远不会到达回调函数,并且返回Promiseawait语句解析。

在您的代码上下文中,从返回值await然后打印它更有意义。

// remove the callback function
const greeting = await Bottle.methods.getGreeting.call();
console.log(greeting);

推荐阅读