怎么在for循环里面获取一个全局变量的值
var addrs;
var nr = "";
//info
var names;
//presale_info
var raise_min;
var raise_max;
PresaleFactory.methods.getPresales().call({from:account},function(error,addrs){//获取到的是一个数组,是一组地址。
for(var i=0;i<addrs.length;i++){
PresaleNewAddr = addrs[i];
PresaleNew=new provider.eth.Contract(PresaleNewAbi,PresaleNewAddr); //通过这个地址数组
PresaleNew.methods.tokeninfo().call({from:account},function(error,token){ //通过这个地址数组,得到名字数组
names = token.name;
});
PresaleNew.methods.presale_info().call({from:account},function(error,info){ //通过这个地址数组,得到最大值和最小值数组
raise_min = info.raise_min;
raise_max = info.raise_max;
});
//最终 需要在这里得到names,raise_min,raise_max 组成
//目前这里无法得到 names , raise_max, raise_max这个值
nr +='<div><h1>'+names+'</h1><h2>'+raise_min+'</h2><h3>'+raise_max+'</h3></div>';
$("#nr").html(nr);
}
});
PresaleFactory.methods.getPresales().call({from: account}, function (error, addrs) {//获取到的是一个数组,是一组地址。
for (var i = 0; i < addrs.length; i++) {
PresaleNewAddr = addrs[i];
PresaleNew = new provider.eth.Contract(PresaleNewAbi, PresaleNewAddr); //通过这个地址数组
const namePromise = new Promise(resolve => {
PresaleNew.methods.tokeninfo().call({from: account}, function (error, token) { //通过这个地址数组,得到名字数组
resolve({name: token.name});
});
});
const minMaxPromise = new Promise(resolve => {
PresaleNew.methods.presale_info().call({from: account}, function (error, info) { //通过这个地址数组,得到最大值和最小值数组
resolve({raise_min: info.raise_min, raise_max: info.raise_max})
})
});
Promise.all([namePromise, minMaxPromise]).then(result => {
let data = result.reduce((t, i) => ({...t, ...i}), {});
$("#nr").append('<div><h1>' + data.name + '</h1><h2>' + data.raise_min + '</h2><h3>' + data.raise_max + '</h3></div>')
})
}
});
【如何在for循环里面获取变量值】https://www.codenong.com/45220510/
设置全局变量可以考虑使用window对象。
这里使用的call方法可能存在异步的情况,这样的话会导致nr拼接时获取不到数据。
并且这里for循环内使用$("#nr").html(nr);,不存在异步的情况下会导致nr元素内仅显示最后一次遍历取到的数据。
建议优化写法。
PresaleFactory.methods.getPresales().call({from:account},function(error,addrs){
for(var i=0;i<addrs.length;i++){
PresaleNewAddr = addrs[i];
PresaleNew=new provider.eth.Contract(PresaleNewAbi,PresaleNewAddr);
PresaleNew.methods.tokeninfo().call({from:account},function(error,token){
window.names = token.name;
});
PresaleNew.methods.presale_info().call({from:account},function(error,info){
window.raise_min = info.raise_min;
window.raise_max = info.raise_max;
});
nr +='<div><h1>'+window.names+'</h1><h2>'+window.raise_min+'</h2><h3>'+window.raise_max+'</h3></div>';
$("#nr").html(nr);
}
});
需要看下完整的代码才方便定位问题在哪里,提供一个demo
你的代码没有问题,如果你输出那全局变量没有值,那么你要在:
PresaleNew.methods.tokeninfo().call({from:account},function(error,token){ //通过这个地址数组,得到名字数组
console.log(token.name);//在这样的地方去测试返回的最终有没有值
names = token.name;
});
那两个赋值的地方正常调用了没?打断点看看赋值的时候变量值是什么?
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!