java - MEAN Stack - 查询和请求延迟?

标签 java ajax node.js mongodb web

我正在尝试学习 Node.js 并使用 MEAN 堆栈编写一个 Web 应用程序。

当我将包含项目数据的字符串数组(例如,["one", "two", "Three"])发送到服务器端时,我使用以下代码来迭代该数组,检查包含该元素的文档是否已存在于 MongoDB 中,然后相应地在数据库中创建新文档。

服务器端代码:

// items is an array of strings sent from the client side
for (var i = 0; i < items.length; i++) {
        var item_name = items[i];            

        // For each item, find an existing one
        Item.findOne({'name': item_name }, function(err, item) {
            // If not already existing, add to database.
            if (!item) {         
                var new_item = new Item();
                new_item.name = item_name;

                new_item.save(function(err) {
                    if (err) throw err;
                });
            }
        });
    }
}

问题在于 new_item.name 始终等于数组中的最后一个元素,即 “三”

我的猜测是,数据库中的查询比循环运行的时间更长,因此当我们进入 findOne() 的回调时,我们已经迭代到了数组的末尾。

这是真的吗?如果是这样,有什么办法可以解决这个问题?

我知道这可能是许多人以前问过的一个常见问题,但经过一段时间的搜索后我仍然无法解决问题。请指教。

最佳答案

已经有一条评论说要这样做。您可以创建闭包(如下所示)或创建循环外部的单独函数。这是一篇关于闭包的小博客文章 http://jondavidjohn.com/blog/2011/09/javascript-closure-explained-using-events

// items is an array of strings sent from the client side
for (var i = 0; i < items.length; i++) {
  (function(item_name) {    
    // For each item, find an existing one
    Item.findOne({'name': item_name }, function(err, item) {
      // If not already existing, add to database.
      if (!item) {         
        var new_item = new Item();
        new_item.name = item_name;

        new_item.save(function(err) {
          if (err) throw err;
        });
      }
    });
  })(items[i]);
}

关于java - MEAN Stack - 查询和请求延迟?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22184789/

相关文章:

node.js - Node 错误_xdl(...).ProjectUtils.readConfigJsonAsync不是函数

java - Eclipse 中缺少 JBoss 服务器运行时库

javascript - jquery ajax 表单提交的 Chrome 数据压缩代理错误

jquery - Ajax 安全问题和可能的攻击

c# - 这个 C# await 是多余的吗?

node.js - Chrome native 消息传递 - 挂起子进程

node.js - 什么是超光速,它与 dat 有何不同?

java - 数组从下一个最大值开始遍历

java - 使用 ArrayList 计算文件中整数出现的次数

java - 为项目中存在的类获取 NoClassDefFoundError