簡體   English   中英

web3立即觸發回調

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM