2014-09-26 95 views
0

我使用Node.js和Octonode(GIThub插件)来获取我使用的一些插件的最新标签。我得到了它的大部分工作,但循环引发了我的循环。在Javascript循环中没有得到正确的结果

client.get()里面,i var返回为2并且只是标记插件。到JSON对象中的最后一项。

这可能是愚蠢的,但我无法弄清楚什么。

任何帮助表示赞赏。

这是我到目前为止。

var github = require('octonode'); 
var client = github.client(); 


var mydata = {plugins:[ 
      {user:'RobinHerbots',repo:'jquery.inputmask',name:'jQuery-InputMask',myversion:'3.1.26'}, 
      {user:'getify',repo:'LABjs',name:'LAB.js',myversion:'2.0.3'} 
     ]}; 

for (var i = 0; i < mydata.plugins.length; i++) { 
var plugin = mydata.plugins[i]; 
    client.get("/repos/"+plugin.user+"/"+plugin.repo+"/tags", {}, function(err, status, body, headers){ 
    console.log(i); 
     if(status === 200) { 
      var ghresult = body[0]; 
      //console.log(plugin.name+" current version: "+ ghresult.name +" :: My Version: "+ plugin.myversion); 
      console.log(ghresult.name,i); 
     } else { 
      console.log(err); 
     } 
    });  
} 

回答

5

我没有时间来测试这一点,但我首先想到的是,你可能需要关闭,保持在回调背景下i变量:

var github = require('octonode'); 
var client = github.client(); 


var mydata = {plugins:[ 
      {user:'RobinHerbots',repo:'jquery.inputmask',name:'jQuery-InputMask',myversion:'3.1.26'}, 
      {user:'getify',repo:'LABjs',name:'LAB.js',myversion:'2.0.3'} 
     ]}; 

for (var i = 0; i < mydata.plugins.length; i++) { 
var plugin = mydata.plugins[i]; 
(function(i) { 
    client.get("/repos/"+plugin.user+"/"+plugin.repo+"/tags", {}, function(err, status, body, headers){ 
     console.log(i); 
     if(status === 200) { 
      var ghresult = body[0]; 
      //console.log(plugin.name+" current version: "+ ghresult.name +" :: My Version: "+ plugin.myversion); 
      console.log(ghresult.name,i); 
     } else { 
      console.log(err); 
     } 
    }); 
})(i); 
} 

编辑

我回去测试了这个在我的节点上为你安装:

node test.js 
1 
2.0 1 
0 
3.1.26 0 

似乎对我来说工作得很好。您可能希望确保您正确复制了代码。这已在node.js版本0.10.31上进行了测试。

+0

Thanks @Brian,但我得到“对象不是函数” – dbinott 2014-09-26 16:19:30

+0

@Derek我回去测试了代码,它对我来说工作正常。用测试结果更新答案。 – Brian 2014-09-26 16:23:39

+0

啊,是的,错过了什么。谢谢。我将'i'替换为'plugin'并且完美地工作。时间阅读关闭。谢谢! – dbinott 2014-09-26 16:28:45