javascript - 卡在Node + MongoDB异步查询问题上

标签 javascript node.js mongodb asynchronous

一点前言:我对使用 Node 非常陌生,所以请容忍我的无知

我正在尝试从 Node.js 中的数组传递一些信息,并检查它是否存在于 MongoDB 文档中。我仍然在努力理解 Node 以及如何异步使用数据库。

我有以下代码

for (i in articleTitle) {

    console.log(articleTitle[i]);

    // Use connect method to connect to the Server 
    MongoClient.connect(mongoUrl, function(err, db) {
        if (err) throw err; // Throw error
        var query = { title: articleTitle[i] }; // Query Parameter

        // Perform Query
        db.collection(mongoCollection).find(query).toArray(function(err, result) {
            if (err) throw err; // Throw error
            if (result == '') {
                console.log('No results found for title:', articleTitle[i]);
            } else {
                console.log('Found an entry');
            }

            db.close(); // Close connection
        });
    });
}

在上面的代码中,我有一个名为 articleTitle 的字符串数组(例如:['Title1', 'Title2', 'Title3']),我然后运行数组中的每个标题(使用 for() 循环)来检查每个标题是否存在于数据库中。

我得到的输出如下:

> Title1
> Title2
> Title3
> No results found for title: Title 3
> No results found for title: Title 3
> No results found for title: Title 3

如上所示,它似乎检查了数组中的最后一个对象三次。我还尝试实现 async package但也为此苦苦挣扎。

如有任何帮助,我们将不胜感激。

最佳答案

您遇到的问题是回调函数中变量 i 的范围。

使用for (let i inarticleTitle) 来代替。 这会为每次迭代创建一个新变量 i,并且范围仅限于该迭代。

此问题的答案JavaScript closure inside loops – simple practical example详细解释为什么会发生这种情况以及 JavaScript 中的作用域和闭包。上述问题与此问题完全相同。

关于javascript - 卡在Node + MongoDB异步查询问题上,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45579487/

相关文章:

javascript - Express 没有得到查询 Mongodb 的其他函数的返回

javascript - .replaceWith 无法使用 .click 函数加载另一个值

javascript - 打印 JSON 属性

javascript - 打开带有发布数据的弹出窗口

node.js - 有没有更优雅的方式来读取然后用 Node js流写入*相同的文件*

node.js - 我不知道如何使用 nodejs native 驱动程序打印 mongodb 查询结果

node.js - 从 MongoDB Atlas 获取日期时间 - Node.js

node.js - 如何使用 GraphQL 在嵌套对象上创建突变?

javascript - react : Perform different operation depending on select option dropdown

javascript - Model.findOneAndRemove(MongoDB 和 Mongoose)的特殊性?