因此,我一直在考慮一個腦筋急轉彎 - 如果我有一個大對象,出於某種原因,我不得不在節點js中迭代,並且不想在我這樣做時阻止事件循環?在JavaScript中編寫非阻塞循環的最簡潔方法是什麼?
這裏是現成的,頂級的我頭一個例子,我敢肯定,這可能是更清潔:
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);
}
雖然我敢肯定有其他原因吧凌亂,這將比普通的循環執行慢,因爲setInterval 0實際上並不是每0毫秒執行一次,但我不確定如何使用快得多的process.nextTick進行循環。
在我的測試中,我發現這個例子需要7 ms運行,而不是本地for循環(hasOwnProperty()檢查,記錄相同的信息),這需要4 ms。
那麼,使用node.js編寫相同代碼的最簡潔/最快的方法是什麼?
對不起 - 誤讀了這個問題 – kennebec
爲什麼?這是濫用。不要這樣做 – Raynos
@Raynos - 爲什麼這會被濫用?如果我使用本機for循環遍歷一個巨大的對象,只要循環執行就會阻塞該線程。這聽起來像是對我的濫用,如果我花25ms爲每個用戶服務,那可能會導致一個巨大的擴展問題。 – Jesse