Solidity

從發送函式返回一個值

  • December 19, 2019

大家好,我有一個非常大的問題。我有這段程式碼

function showInfo(uint _pesel) public onlyMainPerson(msg.sender) returns (string memory, string memory) {
   string memory x = showName(_pesel);
   string memory y = showDate(_pesel);
   return(x,y);
}

function showName(uint _pesel) private view returns( string memory) {
   return(wills[_pesel].name);
}
function showDate(uint _pesel) private view returns( string memory) {
   return(wills[_pesel].date);
}

我想在我的網路應用程序中使用它,我正在這樣做

const names = await this.state.contract.methods.showInfo(123).send({from: this.state.account}, (e) => {
       console.log("done")
       console.log(names);
   })
   console.log(names);

但它不工作!它只顯示“未定義”。如何解決?提前致謝!

你在這裡有兩個問題:

  1. 您正在鏈上執行您的函式,因此您無法擷取返回值。
  2. send方法返回事務雜湊,而不是函式呼叫結果。

解決此問題的最簡單方法是將您的函式標記為並通過以下方法view在鏈下執行:call

function showInfo(uint _pesel) public view onlyMainPerson(msg.sender) returns (string memory, string memory) {
 string memory x = showName(_pesel);
 string memory y = showDate(_pesel);
 return(x,y);
}
const names = await this.state.contract.methods.showInfo(123).call(
 {from: this.state.account});
console.log(names);

有關詳細資訊,請參閱文件

引用自:https://ethereum.stackexchange.com/questions/78385