我不确定我是否应该在以太坊SE上发布这篇文章,但我感觉它与JavaScript相关,所以我会在这里尝试:
我有一个非常简单的智能合约,基本上只包含一个getNum
函数和一个setNum
函数。智能合约可以在这里查看:https://pastebin.com/ci6mbPDq
我试图构造一个简单的前端来调用它。基本上,我遵循这个guide。我的前端的工作codepen(演示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区块链。然而,我注意到这两个函数调用似乎都立即启动了回调。
谁能帮我弄清楚为什么函数调用会立即返回?
1条答案
按热度按时间nbnkbykc1#
回调没有被立即调用,问题是你没有发送一个实际的地址,它应该是一个字符串,你发送的是一个数字:
您得到
0
,因为您发送的无效地址在Map中不存在:如果它不存在,它将返回
uint
的默认值,即零。发送一个字符串,它将工作:
此外,如果您只希望当前用户检索他们自己的值,而不让其他用户检索该数据(他们可以,因为它是公共的,但不是那么容易),则应该使用
msg.sender
并删除函数参数。