0

我正在尝试按类别检索产品,我想并行处理,首先我无法弄清楚如何编写等待条件或理想的回调方法让父函数知道所有产品都已经从数据库中检索。

我对所有解决方案持开放态度,理想情况下,我在这里使用了 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?

有什么解决办法吗?

4

1 回答 1

0

您可以使用我的Qx库,它简化了 Q 和数组的使用:

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

如果您的数据库使用回调而不是承诺,则可以使用Q.ninvoke()将其转换为承诺。

于 2013-10-20T17:55:31.627 回答