关键就是加入回调函数,调用的函数需要传参就写好传入的参数再加回调函数,不传参就直接加回调函数:
例1:需要传参的web3.personal.unlockAccount(addr,password)函数
web3.personal.unlockAccount(_addr,_password,function(err,res){
if(!err) {
console.log(res);
}else{
console.log(err);
}
}));
var res = myContract.function.call();
以及上面这个情况,加入回调就是:
myContract.function.call(function (err, res) {
//do stuff
})
err是错误信息,res是返回结果(result)
回调里面就写你的判断和对错误信息的处理,比如:
myContract.function.call(function (err, res) {
//do stuff
if(!err) {
console.log(res);
}else{
console.log(err);
}
})
可为什么对我遇到的情况不太适用呢?因为我没有在调用方法。我用的是web3.eth.accounts[i]在访问账户列表,这其实并不是一个方法呀,如何加入回调?感觉很别扭,后来我想到用getAccounts这一方法先得到所有地址,然后取出我们需要的那个,代替我们的accounts[i]就可以了:
var s;
web3.eth.getAccounts(function callback(err, value) {
if(!err){
s = value[i];
console.log(s);
}
else {
console.log(err);
}});
这样我们就可以在遍历中像往常一样取出accounts[i],并且也加入了回调。
所以for循环这部分修改后的完整代码如下:
for(var i = 0; i < web3.eth.accounts.length; ++i) {
var s;
var owner = VotingAddr.owner(function callback(err, value) {});
web3.eth.getAccounts(function callback(err, value) {
if(!err){
s = value[i];
console.log(s);
}
else {
console.log(err);
}});
if(owner == s) {
Select += "<option value='" + i + "'>" + web3.eth.accounts[i] + "</option>";
foundOwner = true;
}
}
VotingAddr.owner()其实是一个方法,所以也要加入回调,和上面的博文提到的方法是完全一样的,在owner这里我没有加入回调的处理,也是可以运行的。
希望对你有所帮助。