【问题标题】:Node Js forEach unable to get resultNode Js forEach 无法获得结果
【发布时间】:2018-07-09 00:46:11
【问题描述】:

我正在尝试迭代结果数组变量。

我能够在函数内部获取数组值,但是当我尝试在外部记录它时,它显示为空。

我在谷歌上搜索了几篇帖子,我发现不推荐使用 forEach,建议使用 for 循环,我什至尝试过,结果为 null。

cursor.forEach() 中的问题是什么...

 router.get('/getlist', function(req, res, handleError) {
    client.connect('mongodb://localhost', function(err, client) {
        if (err) throw err;
        var db = client.db('angular-demo');
        var collection = db.collection("api_details");
        var query = {};
        var cursor = collection.find(query);
        var results = new Array();
        var results = cursor.forEach(
            function(result) {
                return result;

                console.log("insert")
                console.log(results);
            }
        );

        console.log("append")
        console.log(results); //results here shows null
    });
 });

日志结果:

append
[]

insert
[ { _id: 5a6867c8e54f6120709eabc5,
app_id: 'CaseRegistration',
description: 'API to register cases in the system',
cost_per_usage: '0.5',
__v: 0 } ]

insert
[ { _id: 5a6867c8e54f6120709eabc5,
app_id: 'CaseRegistration',
description: 'API to register cases in the system',
cost_per_usage: '0.5',
__v: 0 },
{ _id: 5a6867fde54f6120709eabc6,
app_id: 'CheckCreation',
description: 'CREs create the case with minimal data and assigns it to case initiation team to create checks',
cost_per_usage: '1',
__v: 0 } ]

【问题讨论】:

标签: node.js foreach


【解决方案1】:

如果你想从find获取结果,你可以使用toArray

cursor.toArray(function (error, documents) {
    console.log(documents)
})
// or
cursor.toArray().then(function (documents) {
    console.log(documents)
})
// or in async function
const documnets = await cursor.toArray()

或者如果您需要以某种方式转换它们,请使用map

【讨论】:

    【解决方案2】:

    在这种情况下,如果您使用 forEachfor 循环,则无关紧要。未填充 results 变量,因为您尝试使用来自 forEach 的返回结果填充它,该结果不会返回任何有用的信息。

    您想要做的只是迭代结果,并在迭代时填充results 数组。

    更像这样:

    var results = [];
    cursor.forEach(
        function(result) {
             results.push(result);
        }
    );
    
    console.log(results); // This should be populated now
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-24
      • 2019-12-24
      • 2015-01-10
      相关资源
      最近更新 更多