[英]web3 instantly firing callback
不確定我是否應該在以太坊SE上發布此內容,但我感覺它與javascript有關,所以我會在這里嘗試:
我有一個非常簡單的智能合約,它基本上只包含一個getNum
函數和一個setNum
函數。 智能合約可以在這里查看: https : //pastebin.com/ci6mbPDq
我正在嘗試構建一個簡單的前端來調用它。 基本上,我遵循本指南 。 我可以在這里找到我前端的工作代碼(演示janky功能): https ://codepen.io/heh/pen/PeMmKe正如你在我的codepen中看到的,我調用了我的getNum
函數:
BasicToken.getNum(0x64319ca297239d8652a0b5f0f12dd6666cb0e05b,
function(error, result)
{
console.log(result.toNumber());
document.getElementById("target").innerText = result.toNumber();
}
);
但是,我一直得到“0”。 另一方面,我的setNum
函數能夠將結果發布到Ropsten區塊鏈。 但是,我注意到兩個函數調用似乎都立即觸發了它們的回調。
任何人都可以幫我弄清楚為什么函數調用立即返回?
謝謝!
回調沒有被立即調用,問題是你沒有發送一個實際的地址,這應該是一個字符串,而你發送一個數字:
0x64319ca297239d8652a0b5f0f12dd6666cb0e05b == 5.720054584403591e+47
你得到0
因為你發送的無效地址在映射中不存在:
mapping (address=>uint) map23;
如果它不存在,它將返回uint
的默認值,該值為零。
發送一個字符串,它將工作:
BasicToken.getNum('0x64319ca297239d8652a0b5f0f12dd6666cb0e05b', () => {})
此外,如果您只希望當前用戶檢索自己的值,而不讓其他用戶檢索該數據(他們可以,因為它是公開的,但不是那么容易),您應該使用msg.sender
並刪除函數參數。
function getNum() public view returns (uint) {
return map23[msg.sender];
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.