把一些从CouchDB的文件放到数组(Node.JS)

我尝试获取ID为1,100,1000的3个文档。但是,node.js是asynchronous的,结果中的数组对象是空的。 如何把文件放入数组?

var objects = {}; var objectsID = [1, 100, 1000]; objectsID.forEach( function( elem ){ objectsDB.get( elem, function( err, object ){ objects[elem] = object; }) }); console.log(objects); 

console.log返回{}。

所以这是一个经典的asynchronous代码问题。 你的代码可以像这样重写:

 var objects = {}; var objectsID = [1, 100, 1000]; var finalize = function( ) { console.log(objects); }; objectsID.forEach( function( elem ){ objectsDB.get( elem, function( err, object ){ objects[elem] = object; // remove ID from the list of IDs var idx = objectsID.indexOf(elem); if (idx!=-1) { objectsID.splice(idx, 1); } // check if it is time to finalize if (!objectsID.length) { finalize(); } }) }); 

您可能还想看看Caolan的async.js库 (特别是async.parallel)。