Javascript
在 for() 循環中呼叫合約
我有
.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); }) }