2013-10-20 71 views
0

我試圖按類別檢索產品基礎,我想平行過程,首先我無法弄清楚如何編寫等待條件或理想讓父功能知道所有產品都已從數據庫中檢索的回調方法。並行調用和Q或異步NodeJS中的等待條件

我願意接受所有的解決方案,理想情況下我在這裏使用了Async,但想要更喜歡Q(https://github.com/kriskowal/q/wiki/Examples-Gallery),這似乎是Mongoose和MongoDB操作的更好選擇。

var temp = [] 
    Async.each([1,2,3,4,5,6,7,8,9...n], 
     function (item, callback) { 
      database.getProductsByTaxonomy(item, function (err, products) { 
       temp = new Object(); 

       temp.TaxonomyID = item; 
       temp.Products = products; 

       results.push(temp); 
       callback(err, products); 
      }); 
     }, 
     function (err) { 
      console.log(err); 
     }); 

     <<wait for all .each call completes>> 

     return temp; // or callback (err, temp); // or emit? 

任何解決方案?

回答

0

你可以用我Qx庫,從而簡化了與Q和陣列工作:

return Qx.map(arr, function (item) { 
    return getPromiseFromDb(item).then(function(products) { 
     return { taxonmyId: item, products: products }; 
    }); 
}); 

如果您的數據庫使用的回調,而不是承諾,你可以使用Q.ninvoke()把它變成一個承諾。

+0

這很好,但無法弄清楚,請你詳細說明你的例子,我缺乏Q和Qx的知識。只是一個簡單的工作示例。 –

+0

@NilayParikh:這是一個簡單的工作例子。你不瞭解什麼部分? – SLaks