Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 获取api回调的参数_Javascript_Node.js - Fatal编程技术网

Javascript 获取api回调的参数

Javascript 获取api回调的参数,javascript,node.js,Javascript,Node.js,这是我得到的 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]); }); } } var m

这是我得到的

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]);
            });
    }
}
var mods=this.registry.gmmods;
对于(变量i=0;i
只有控制台日志输出是未定义的,我似乎知道如何在回调函数中获取该数据,因为回调数据不包含它


有谁能告诉我,当调用this.api.stable回调时,我在闭包中遇到了一个问题,我很可能是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=[“嗨”,“那里”];

对于(i=0;我不这么认为,因为我可以记录mods[i]在api调用之前,控制台不是像我的示例中那样记录未定义的吗?你能记录i的值吗?我不知道api.stable是否异步,但如果是,那就是你的问题。哈哈,是的,它是异步的,那么如何解决这个问题呢?我已经更新了答案,无法测试,但基本上你有一个匿名us函数返回回调,当调用匿名函数时,传入当前值“i”,从而为回调使用的“i”创建一个新的闭包。
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)
      );
    }
}