2013-02-14 13 views
1

我嘗試獲取ID爲3的文檔:1,100,1000。但是node.js是異步的,而數組對象的結果爲空。如何把文件放入數組?從CouchDB放置一些文件到Array(Node.JS)

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返回{}。

+0

感謝您使用nano,感謝它:)您可能會在本網站上找到一些不錯的提示:http://nodetuts.com。您的問題的答案如下,它應該解決您的問題。這個網站將幫助你理解它爲什麼這樣做! – dscape 2013-02-14 23:29:42

回答

2

所以這是一個經典的異步代碼問題。您的代碼可以寫成這樣:

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's async.js library以及(尤其是async.parallel)。

+0

謝謝!其作品。 – user2071586 2013-02-14 11:28:16