调用合同方法的不同方式

时间:2017-12-21 07:39:26

标签: blockchain ethereum solidity truffle

我有一个方法名称为getValues()的契约。从Dapp我调用契约方法为'contractCAt.getValues.call(function(error,result){...})'这样可以正常使用' contractCAt.getValues(function(error,result){...})'这个语法也很好。我调用契约方法的两种方法没有任何区别。所以任何人都可以帮我理解这些语法

1 个答案:

答案 0 :(得分:1)

请参阅web3j documentation

  • handleResponse(data) { // bind this in your constructor. this.setState({ Data: data }); } onClick() { var brand = Id; ReportTitle = brand; url = base_url + brand + "/posts?access_token=" + Token + request; var hasnext = true; getNextAndConcatJSonOrNot(url, 0, finalJson, this.handleResponse); } function getNextAndConcatJSonOrNot(urlToCall, cnt, jsonData, handleResponse){ var jsonFinalObject = ''; $.getJSON(urlToCall).done(function(data) { var tempJson = {}; tempJson = jsonData.concat(data.data); jsonData = tempJson; cnt++; if(data.paging.next != "" && cnt < 2){ getNextAndConcatJSonOrNot(data.paging.next, compteur, jsonData); } else { handleResponse(jsonData); } }); } 在本地运行,不会改变区块链合同的状态。不消耗任何醚。
  • contractCAt.getValues.call()确实改变了状态(假设交易成功开采)。
  • contractCAt.getValues.sendTransaction()根据方法定义自动委托上述两个中的一个。常量和纯函数将使用contractCAt.getValues(),而其余函数将使用call()