javascript - web3 立即触发回调

标签 javascript callback blockchain ethereum web3

不确定我是否应该在 Ethereum SE 上发布这个,但我觉得它与 javascript 更相关,所以我会在这里尝试:

我有一个非常简单的智能合约,它基本上只包含一个 getNum 函数和一个 setNum 函数。智能合约可以在这里查看:https://pastebin.com/ci6mbPDq

我正在尝试构建一个简单的前端来调用它。本质上,我遵循这个 guide .可以在此处找到我的前端的工作代码笔(演示简陋的功能):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 区 block 链。但是,我注意到这两个函数调用似乎都立即触发了它们的回调。

谁能帮我弄清楚为什么函数调用会立即返回?

谢谢!

最佳答案

回调没有被立即调用,问题是你没有发送一个实际的地址,它应该是一个字符串,而你发送的是一个数字:

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];
}

关于javascript - web3 立即触发回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50544599/

相关文章:

javascript - 如何打开新的浏览器选项卡?

javascript - 以编程方式触发提示的确定按钮

javascript - NodeJs : Filter mongo query results with results from another collection

gradle - Gradle异常org.gradle.internal.service.ServiceCreationException

ios - "Query response is nil without errors"

blockchain - Rinkeby 认证水龙头已离线

javascript - 为什么要使用 readFileAsync 来读取 Node.js 中包含 json 的文件?

javascript绑定(bind)回调到任何函数

php - 为什么这个 array_filter 方法不调用这个函数?

javascript - 不使用 IFrame 的 Comet 应用程序