对于在NodeJS中遍历数组的循环,但console.log不会打印到terminal?

我使用Node.JS来遍历一些数据,并将数据推送到一个数组。 但是,console.log似乎没有显示我所做的任何更改。 我希望能够处理twitter_ids中的数据后,function完成数据。

我想知道是不是因为Node.JS的asynchronous性质的误解?

var twitter_ids = [] function sendResults (twitter_ids){ return function(data){ for (var num in data['results']) { T.get('users/lookup', { screen_name: data['results'][num]['twitter_id'] }, function(err, data, response) { twitter_ids.push(data[0]['id']); }); } console.log(twitter_ids); } } sunlightResults.call(sendResults(twitter_ids)); 

您的问题是,您正在打印到控制台之前T.get()检索到任何数据。

如果你需要等待多个callback被调用(按照你的例子),我通常使用像async.eachSeries()这样的辅助函数库函数。 如果你想自己做,像recursion这样的东西可以成为你的朋友,但可能有点复杂:

 function lookup(list, index, output, finished) { if(index >= list.length) { return finished(output); } var num = list[index]; T.get('users/lookup', { screen_name: data['results'][num]['twitter_id'] }, function(err, data, response) { output.push(data[0]['id']); lookup(list, index+1, output, callback); }); } var outputList = []; lookup(data['results'], 0, outputList, function(output){ console.log(output); }); 

我相信这里的一些天才可以使这个更好的可读性,但只是一个超级快速的例子。

这是一个使用asynchronous的实现

 var async = require('async'); var twitter_ids = [] function sendResults (twitter_ids){ return function(data){ async.each(data.results, function (result, done) { T.get('users/lookup', { screen_name: result.twitter_id }, function(err, data, response) { if (err) { return done(err); } twitter_ids.push(data[0].id); done(); }); }, function (err) { if (err) { throw err; } console.log(twitter_ids); }); } } sunlightResults.call(sendResults(twitter_ids));