javascript - 对于在 NodeJS 中遍历数组但 console.log 不会打印到终端的循环?

标签 javascript arrays node.js asynchronous

我正在使用 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()。如果你想自己做,递归之类的东西可以是你的 friend ,但可能有点令人费解:

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

我相信这里的一些天才可以使它变得更好,更具可读性,但这只是一个 super 简单的例子。

关于javascript - 对于在 NodeJS 中遍历数组但 console.log 不会打印到终端的循环?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24376532/

相关文章:

javascript - Jasmine.js v2.0.0 - TypeError : Cannot read property 'stopPropagation' of undefined

javascript - Google 标记动画更改

javascript - 搜索 JSON 数组并返回兄弟标记值

arrays - 根据不同的对象属性添加新属性

javascript - 为什么不在本地环境中抛出语法错误?

javascript - 这段短代码的大O

javascript - 使用 FireFox 扩展在本地更改远程网站的 JavaScript?

当只有一些为空时,Javascript变量列表obj.names为空

javascript - Passport 扔 "undefined is not a function"

javascript - 将 csv 转换为 json 返回空 json 文件