我试图运行以下代码,使用智能契约的getIdBytes方法获取状态变量,并将其分配给一个java脚本数组变量,但它似乎不起作用。
我所能做的就是使用console.log(返回)打印返回的值。
有人能给我指个正确的方向吗?
var coreValues = ['Apple', 'Banana'];
console.log("Before call :" + coreValues[1]);
if (get_flag)
{
contract3.methods.getIdBytes(index1, abstract_contract_address).call().then(function(result){
for (var i = 0; i < 5; i++) {
coreValues[i] = result[i];
console.log("Inside Function Call" + coreValues[i]);
}
});
console.log("After Call :" + coreValues[0]);这是输出的样子。
Before call :Banana
After Call :Apple
Inside Function call : Steve
Inside Function call : Rogers
Inside Function call : Male
Inside Function call : 0987654
Inside Function call : 12/05/1980我应该使用事件吗?
发布于 2018-11-12 13:24:13
web3js调用的执行是异步的,因此在循环中的代码之前执行"After Call“。
试试这个:
var coreValues = ['Apple', 'Banana'];
console.log("Before call :" + coreValues[1]);
if (get_flag) {
contract3.methods.getIdBytes(index1, abstract_contract_address).call().then(function(result){
for (var i = 0; i < 5; i++) {
coreValues[i] = result[i];
console.log("Inside Function Call" + coreValues[i]);
}
console.log("End of Call :" + coreValues[0]);
// continue with your logic here...
});
}
console.log("Too early: " + coreValues[0]);另一种选择是使用“等待”:
var coreValues = ['Apple', 'Banana'];
console.log("Before call :" + coreValues[1]);
if (get_flag) {
await contract3.methods.getIdBytes(index1, abstract_contract_address).call().then(function(result){
for (var i = 0; i < 5; i++) {
coreValues[i] = result[i];
console.log("Inside Function Call" + coreValues[i]);
}
});
}
console.log("Not too early: " + coreValues[0]);
// continue with your logic here...https://ethereum.stackexchange.com/questions/62187
复制相似问题