2013-05-16 29 views
2

這裏是我已經有了獲得API回調的參數

var mods = this.registry.gmmods; 
for (var i = 0; i < mods.length; i++) { 
    if(mods[i] != this.config.botid){ 
      this.api.stalk(mods[i],true,function (data){ 
        console.log(mods[i]); 
      }); 
    } 
} 

僅控制檯日誌輸出不確定,我似乎可以找出如何讓回調函數的數據作爲回調的數據不包含它

任何人都可以告訴我怎麼可能是能夠做到這一點

回答

3

它在你的閉合與我的一個問題,當this.api.stalk回調被稱爲有機會,我是mods.length。請看下面的例子:

var i = 0; 
var arr=["hi","there"]; 
for(i=0;i<arr.length;i++){ 
    setTimeout(function(){ 
    console.log(arr[i]); //undefined 
    console.log("and i is:"+i); //i will be 2 
    },100); 
} 

這裏是你如何解決這個問題,關閉:

var i = 0; 
var arr=["hi","there"]; 
for(i=0;i<arr.length;i++){ 
    setTimeout(
    (function(index){ 
     return function(){ 
     console.log("Index is:"+index);//0 and 1 
     console.log("arr at index:"+arr[index]);//hi and there 
     console.log("i is:"+i);//2 and 2 
     console.log("arr at i:"+arr[i]);//undefined and undefined 
     } 
    })(i) 
    ,100); 
} 

你的代碼可能看起來是這樣的:

var mods = this.registry.gmmods; 
for (var i = 0; i < mods.length; i++) { 
    if(mods[i] != this.config.botid){ 
     this.api.stalk(mods[i],true, 
     (function(index){ 
      return function (data){ 
      console.log("index is:"+index); 
      console.log(mods[index]); 
      console.log("i is:"+i); 
      console.log(mods[i]); 
      } 
     })(i) 
    ); 
    } 
} 
+0

我不這樣,因爲我認爲可以在api調用之前記錄mods [i]並且工作正常 – mcgrailm

+0

控制檯日誌未定義如我的示例中所示嗎?你能記下我的價值嗎?我不知道api.stalk是否是異步的,但如果它是那麼那就是你的問題。 – HMR

+0

lol對,是的,它是異步的,那麼如何解決這個問題 – mcgrailm