Учитывая этот код:Перебор объекта ключ/значения асинхронно
var o = {
k1: 'v1',
k2: 'v2',
k3: 'v3'
};
var stupidf = function(k, v, callback) {
setTimeout(function() {
console.log(k + "=" + v);
callback();
}, 2000};
};
Какой самый лучший способ произвести вывод:
// after 2 seconds
stdout: k1=v1
// after 4 seconds
stdout: k2=v2
// after 6 seconds
stdout: k3=v3
С массива, вы бы сделать копию и push()
оно с обратными вызовами, но я не могу понять, как это сделать с объектом.
Итак, вам нужно создать массив, чтобы сделать это? Нет способа без создания массива? –
@ luxun - свойства объекта JS НЕ заказываются. Вы можете сохранить только порядок (а не значения) в массиве. В этом случае у вас будут две структуры данных, массив для порядка свойств и объект для хранения значений свойств. –
@ luxun Если вы можете положиться на порядок итераций (что гарантируют некоторые браузеры), вы можете сделать это через ужасный механизм хранения последнего увиденного ключа и затем (при каждом обратном вызове), итерации объекта до тех пор, пока вы не увидите этот ключ. Но это не только ужасно неэффективно, но и не гарантируется работа по спецификации. – Phrogz