回调函数Web3的输入参数

时间:2018-09-04 18:28:46

标签: javascript web3

我想通过智能合约将参数发送给函数,但尝试了不同的方法,但是它总是给我错误。

我的固定文件是

 pragma solidity ^0.4.18;

 import "./ConvertLib.sol";

 contract Check {
 function multiply(uint a) public pure returns(uint){
    return a*a;
 }
}

我成功连接到Web3,并创建了合约实例inst。当我尝试执行功能

 console.log(inst.multiply.call()(function(err,result){console.log("r-->"+result);}));

它给我错误

Invalid number of arguments to Solidity function

如果我添加这样的参数

console.log(inst.multiply(2).call()(function(err,result){console.log("r-->"+result);}));

或这样

console.log(inst.multiply.call(2)(function(err,result){console.log("r-->"+result);}));

它给我这个错误

Error: The MetaMask Web3 object does not support synchronous methods like eth_call without a callback parameter.

我正在使用Web3版本0.20.3

2 个答案:

答案 0 :(得分:0)

我在Hello World合同中遇到了同样的问题,拔了好一会儿之后,我尝试了以下方法:

console.log(inst.multiply(2, function(err,result){console.log("r-->"+result);}));

也就是说,将回调函数作为最后一个参数传递。如文档中所述,“默认情况下,所有功能(Solidity的功能)都使用同步HTTP请求。如果要发出异步请求,则可以将可选的回调作为最后一个参数传递给大多数函数。所有回调都使用错误第一个回调样式:“

web3.eth.getBlock(48, function(error, result){
   if(!error)
       console.log(JSON.stringify(result));
   else
       console.error(error);
})

答案 1 :(得分:0)

尝试这样的事情:

inst.methods [multiply](2).call()。then(data => ...)。catch(err => {...})