2015-07-02 11 views
5

mam pewne dane JSON następująco:Pobierz klucz obiekt przy async.each

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

jestem przelotowego danych przy użyciu async.each następująco:

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

Sygnał wyjściowy jestem coraz to:

'/brokers/topics/testing/partitions/1616133379/state' '/brokers/topics/testing/partitions/1616133378/state' '/brokers/topics/testing/partitions/1616133380/state'

Jak widać data przedmiot przekazywany poprzez funkcję async.each trzyma wartość pary klucz/wartość, podczas gdy faktycznie chcę to przekazać klucz do produkowania tego wyjścia:

'/brokers/topics/testing/partitions/0/state' '/brokers/topics/testing/partitions/1/state' '/brokers/topics/testing/partitions/2/state'

Czy mimo to mogę dostać klucz przeszedł w przeciwieństwie do wartości?

To musi być uruchamiane asynchronicznie.

Dzięki

+0

możliwe duplikat [async.js każdego indeksu uzyskać w iteracyjnej] (http://stackoverflow.com/questions/17516981/async-js-each-get-index -in-iterator) – andlrc

+1

Google 'async.each key' -> [I Feel Lucky] – andlrc

Odpowiedz

5

Można użyć forEachOf, iterator zostaje przekazana wartość i klucz w przypadku każdej pozycji obiektu.

iterator(item, key, callback) - A function to apply to each item in obj. The key is the item's key, or index in the case of an array. The iterator is passed a callback(err) which must be called once it has completed. If no error has occurred, the callback should be run without arguments or with an explicit null argument.

Zastosowanie:

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

Idealne, że dziękuję. Jestem nowy w bibliotece asynchronicznej, więc jeszcze jej nie widziałem –

0

Staraj się umieścić w pętli.

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

To właśnie spowodowało błąd' console.log (topicData.partitions.indexOf (data)); ^ TypeError: Object # nie ma metody 'indexOf'' –

Powiązane problemy