For循环迭代数组在NodeJS中,但console.log won't打印到终端
For loop iterating over array in NodeJS but console.log won't print to terminal?
我使用Node.JS来迭代一些数据并将该数据推送到数组。但是,console.log似乎没有显示我所做的任何更改。我想能够处理在twitter_ids的数据后,函数完成推数据给它。
我想知道这是否是由于Node.JS的异步性质的误解?
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()
检索到任何数据之前您正在打印到控制台。
如果你需要等待,直到多个回调被调用(根据你的例子),我通常使用一个助手库函数,如async.eachSeries()。如果你想自己做,像递归这样的东西可以成为你的朋友,但可能有点复杂:
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);
});
我相信这里有一些天才可以使这篇文章更好更可读,但只是一个超级快速的例子。
下面是使用async
的实现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));
相关文章:
- 在终端中运行 JavaScript 时(使用 rhino),如何使用 print() 函数在一行中打印
- http.listen()在运行时接受终端命令
- 节点webkit应用程序与终端通话
- 任何将(SSH)终端嵌入到一些HTML5表示系统中的想法(例如,show.js)
- 如何解决'窗口未定义'终端上的节点JS出错
- AngularJS ng include won'不知什么原因不起作用
- 如何使用粉笔终端字符串样式做得正确
- 通过php添加到变量won'不起作用
- vue-js-单选按钮won't默认情况下使用v-model属性进行检查
- 在JS中创建终端帮助文本
- 在html中显示javascript变量won'不起作用
- 使用终端将信息输入到Javascript中
- 如何从curl终端转换为javascript
- Javascript发布到表单-won'如果字段是隐藏的,则不起作用
- javascript for loop won't iterate
- 在终端中使用imacros运行JS
- angular won't显示范围变量(已完成)
- OSX终端-如何正确编写此命令以将CSV导入MongoDb
- Jquery 终端选项卡完成
- For循环迭代数组在NodeJS中,但console.log won't打印到终端