Javascript

在 for() 循環中呼叫合約

  • July 3, 2018

我有.js文件,契約必須通過rand作為參數傳遞五次。但是rand已經被覆蓋,只有第五個隨機值被傳遞給合約五次:

for(var i=0;i<5;i++){
   var rand =Math.random();
   contractt.deployed().then(function(instance){
   var instancee =instance;
        return instancee.add(rand,{from:wallet,gas:4000000});
       }).then(function(result) {
           console.log('result='+result);
       }) 
  })
} 

我嘗試使用setTimeout()如下:

for(var i=0;i<5;i++){
   setTimeout(()=>{
   var rand =Math.random();
   contractt.deployed().then(function(instance){
   var instancee =instance;
        return instancee.add(rand,{from:wallet,gas:4000000});
       }).then(function(result) {
           console.log('result='+result);
       }) 
  })
 },1000);
} 

但是,我仍然得到相同的結果。

這不是一個真正的乙太坊問題..

請參閱https://stackoverflow.com/questions/750486/javascript-closure-inside-loops-simple-practical-example

對於您的具體情況,您可以這樣做:

for(var i=0;i<5;i++){
   contractt.deployed().then(function(instance){
       var instancee = instance;
       return instancee.add(Math.random(), {from:wallet,gas:4000000});
   }).then(function(result) {
       console.log('result='+result);
   })
} 

引用自:https://ethereum.stackexchange.com/questions/52567