2

ここに私が持っているものがあります

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]);
            });
    }
}

コンソールログのみが未定義を出力し、コールバックデータに含まれていないため、コールバック関数でそのデータを取得する方法を理解できるようです

どうすればそれができるのか誰か教えてくれませんか

4

1 に答える 1

3

this.api.stalk のコールバックが呼び出されると、i が 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)
      );
    }
}
于 2013-05-16T01:23:30.090 に答える