Какой самый чистый способ написать неблокирующий цикл for в javascript?

Итак, я подумал о головоломке - что, если бы у меня был большой объект, который мне по какой-то причине пришлось перебирать в узле js, и я не хотел блокировать цикл событий, пока я делал это?

Вот пример из моей головы, я уверен, что он может быть намного чище:

var forin = function(obj,callback){
    var keys = Object.keys(obj),
        index = 0,
        interval = setInterval(function(){
            if(index < keys.length){
                callback(keys[index],obj[keys[index]],obj);
            } else {
                clearInterval(interval);
            }
            index ++;
        },0);
}

Хотя я уверен, что есть и другие причины беспорядка, это будет выполняться медленнее, чем обычный цикл for, потому что setInterval 0 на самом деле не выполняется каждые 0 мс, но я не уверен, как создать цикл с гораздо более быстрым процессом process.nextTick.

В своих тестах я обнаружил, что выполнение этого примера занимает 7 мс, в отличие от собственного цикла for (с проверками hasOwnProperty (), регистрирующими ту же информацию), который занимает 4 мс.

Итак, каков самый чистый / быстрый способ написать тот же код с использованием node.js?

19
задан Jesse 3 November 2011 в 17:05
поделиться