2013-05-16 26 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