asynchronous地遍历对象键/值

鉴于此代码:

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 

有了一个数组,你可以制作一个副本,并用callback函数来push() ,但我真的不知道如何用一个对象来实现这个function。

你假设o中条目的迭代有一个有保证的顺序; 它没有 。 假设你不关心按照什么顺序把它们拿出来:

 function asyncIterate(o,callback,timeout){ var kv=[], i=0; for (var k in o) if (o.hasOwnProperty(k)) kv.push([k,o[k]); var iterator = function(){ callback(kv[i][0],kv[i][1]); if (++i < kv.length) setTimeout(iterator,timeout); } setTimeout(iterator,timeout); } asyncIterate(o,function(k,v){ console.log(k+'='+v); },2000); 

JavaScript没有类似于Lua的next()函数,它允许你在给定的键之后find下一个键/值对。

如果您关心条目的顺序,那么您需要将原始键/值对存储在数组中,而不是对象。