使用async.each获取对象密钥

时间:2015-07-02 08:50:33

标签: javascript asynchronous

我有一些JSON数据如下:

{ 
    version: 1,
    partitions: { 
        '0': [ 1616133379 ], 
        '1': [ 1616133378 ], 
        '2': [ 1616133380 ] 
    } 
}

我使用async.each循环数据,如下所示:

async.each(topicData.partitions, function(data, callback){
    console.log('/brokers/topics/' + topic + '/partitions/' + data + '/state');
    callback();
},
function(err){
    if(err) {
        console.log(err);
        callback(err);
    }
});

我得到的输出是:

  

'/中间商/主题/检测/分区/ 1616133379 /状态'   '/经纪人/主题/测试/分区/ 1616133378 /状态'   '/中间商/主题/检测/分区/ 1616133380 /状态'

正如您所看到的,通过data函数传递的async.each项保持键/值对的值,而我实际上希望它传递键以产生此输出:

  

'/中间商/主题/检测/分区/ 0 /状态'   '/中间商/主题/检测/分区/ 1 /状态'   '/中间商/主题/检测/分区/ 2 /状态'

无论如何我可以获得传递的密钥而不是值吗?

必须以异步方式运行。

由于

2 个答案:

答案 0 :(得分:7)

您可以使用forEachOf,迭代器会在对象的情况下传递每个项的值和键。

  

iterator(item,key,callback) - 一个应用于obj中每个项目的函数。键是项的键,或者是数组的索引。迭代器传递一个回调(err),一旦完成就必须调用它。如果没有发生错误,则应该在没有参数或显式空参数的情况下运行回调。

用法:

async.forEachOf(topicData.partitions, function(item, key, callback){
  console.log('/brokers/topics/' + topic + '/partitions/' + key + '/state');
  callback();
}, function(err){
  if(err) {
    console.log(err);
    callback(err);
  }
});

答案 1 :(得分:0)

尝试将其放入循环中。

console.log(topicData.partitions.indexOf(data));