2013-11-25 271 views
0
data.forEach(function(shelf){ 
    books.find({"shelfid":shelf.id},function(book){ 
    //book1,book2,book3 
    }) 
}); 

每個書架都有一個ID,我找到所有具有這些ID的書籍。 因此,假設這種方法找到3本書,當foreach完成時,我該如何迴應所有那些 書籍。foreach完成時做出響應

+0

我怎麼知道,如果每個完成? – hackio

+2

如果你有幾個異步方法,我建議使用[async.js](https://github.com/caolan/async)作爲節點。 – adeneo

+1

你可以使用[promises](https://github.com/kriskowal/q) – katranci

回答

1

async module非常適合這樣的:

它通過每一個迭代基本上並允許您指定要運行後,他們都運行的功能。

var arr = []; 
async.each(data, function (fd, callback) { 
    books.find({"shelfid":fd.id},function(book){ 
     arr.push(book); 
     callback(); 
    }); 
}, function(err){ 
    // this runs once they've all been iterated through. 
    // if any of the finds produced an error, err would equal that error 
    // books are in the arr array now. 
}); 

編輯

由於WiredPrairie指出,這樣做更有意義:

books.find({shelfid: { $in: [shelfIds] }}, function(books){ 
    // do stuff with books. 
}) 
+0

不可能不使用模塊嗎? – hackio

+0

@hackio更新了答案,以包含一種無需模塊的方式。 – Niall