两个forEach完成执行后res.send

时间:2017-04-03 15:43:50

标签: node.js api-design

const collect = [];
req.body.product.forEach(function(entry) {
    mongoClient.connect(databaseServerUrl, function(err, db) {
        let testCollection = db.collection('Tests');
        testCollection.find({Product: entry}).toArray((err, docs) => {
            let waiting = docs.length;
            docs.forEach(function (doc) {
                collect.push(doc);
                finish();
            });
            function finish() {
                waiting--;
                if (waiting === 0) {
                    res.send(collect);
                }
            }
        });
        db.close();
    });
});

这只是回到第一组。例如,如果我的req.body.product数组中有两个节点。我只回到第一盘。但我需要从一个系列中取回所有东西。

2 个答案:

答案 0 :(得分:1)

我建议执行一个获取所有结果的查询,而不是执行两个查询并将结果合并到一个数组中,这看起来像这样:

TreeMap

请注意,我没有对此进行测试,因为我没有在我面前拥有MongoDB数据库。

答案 1 :(得分:-1)

你的mongoClient.connect()是异步的,但你的循环只是执行而不等待回调。

尝试异步forEach循环:enter link description here

这应该可以解决您的问题