web3 立即触发回调
web3 instantly firing callback
不确定我是否应该 post 在 Ethereum SE 上这样做,但我觉得它更 javascript 相关,所以我会在这里尝试:
我有一个非常简单的智能合约,它基本上只包含一个 getNum
函数和一个 setNum
函数。可以在这里查看智能合约:https://pastebin.com/ci6mbPDq
我正在尝试构建一个简单的前端来调用它。本质上,我遵循这个 guide. A working codepen of my frontend (demonstrating the janky functionality) can be found here: https://codepen.io/heh/pen/PeMmKe 正如你在我的代码笔中看到的那样,我将我的 getNum
函数称为:
BasicToken.getNum(0x64319ca297239d8652a0b5f0f12dd6666cb0e05b,
function(error, result)
{
console.log(result.toNumber());
document.getElementById("target").innerText = result.toNumber();
}
);
但是,我的结果一直是“0”。另一方面,我的 setNum
函数能够 post Ropsten 区块链的结果。但是,我注意到这两个函数调用似乎都立即触发了它们的回调。
谁能帮我弄清楚为什么函数会立即调用 return?
谢谢!
回调没有被立即调用,问题是你没有发送一个实际的地址,它应该是一个字符串,而你发送的是一个数字:
0x64319ca297239d8652a0b5f0f12dd6666cb0e05b == 5.720054584403591e+47
你得到 0
因为映射中不存在你发送的无效地址:
mapping (address=>uint) map23;
如果它不存在,它将 return uint
的默认值,即零。
发送一个字符串,它会起作用:
BasicToken.getNum('0x64319ca297239d8652a0b5f0f12dd6666cb0e05b', () => {})
此外,如果您只想让当前用户检索他们自己的值,而不让其他用户检索该数据(他们可以,因为它 public,但没那么容易),您应该使用 msg.sender
并删除函数参数。
function getNum() public view returns (uint) {
return map23[msg.sender];
}
不确定我是否应该 post 在 Ethereum SE 上这样做,但我觉得它更 javascript 相关,所以我会在这里尝试:
我有一个非常简单的智能合约,它基本上只包含一个 getNum
函数和一个 setNum
函数。可以在这里查看智能合约:https://pastebin.com/ci6mbPDq
我正在尝试构建一个简单的前端来调用它。本质上,我遵循这个 guide. A working codepen of my frontend (demonstrating the janky functionality) can be found here: https://codepen.io/heh/pen/PeMmKe 正如你在我的代码笔中看到的那样,我将我的 getNum
函数称为:
BasicToken.getNum(0x64319ca297239d8652a0b5f0f12dd6666cb0e05b,
function(error, result)
{
console.log(result.toNumber());
document.getElementById("target").innerText = result.toNumber();
}
);
但是,我的结果一直是“0”。另一方面,我的 setNum
函数能够 post Ropsten 区块链的结果。但是,我注意到这两个函数调用似乎都立即触发了它们的回调。
谁能帮我弄清楚为什么函数会立即调用 return?
谢谢!
回调没有被立即调用,问题是你没有发送一个实际的地址,它应该是一个字符串,而你发送的是一个数字:
0x64319ca297239d8652a0b5f0f12dd6666cb0e05b == 5.720054584403591e+47
你得到 0
因为映射中不存在你发送的无效地址:
mapping (address=>uint) map23;
如果它不存在,它将 return uint
的默认值,即零。
发送一个字符串,它会起作用:
BasicToken.getNum('0x64319ca297239d8652a0b5f0f12dd6666cb0e05b', () => {})
此外,如果您只想让当前用户检索他们自己的值,而不让其他用户检索该数据(他们可以,因为它 public,但没那么容易),您应该使用 msg.sender
并删除函数参数。
function getNum() public view returns (uint) {
return map23[msg.sender];
}