繁体   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