循环进行mongoose操作为什么总是重复最后一条?见鬼!![CLOSED]
发布于 11 年前 作者 guotingchaopr 5206 次浏览 最后一次编辑是 8 年前
   //我这里是想先查询数据库是否已经保护這条数据 如果没有的话 后再进行保存 防止重复
    TweetDAO.prototype.save = function (objs, callback) {
    var const_count = 0;
      for(var obj in objs){
          console.log(obj+" : "+ objs[obj].id);
          var temp = objs[obj];
          findOneById(objs[obj].id,function(findResult,query){
                  console.log("id:"+query + " 是否有数据:"+(findResult!= null) );
                  if(findResult =="" || findResult ==null){
                          var instance = new Tweet(temp);
                          instance.save();
                  }
  
         });
      }
  };
      var findOneById = function(query,callback) {
          Tweet.findOne({id:query}, function(err,data){
                  console.log(data);
                  callback(data,query);
          });
  }

但是每次我发现 每次插入全部都是重复最后一条啊!

4 回复

问题出在这里 var instance = new Tweet(temp);

你这里取的temp 永远都是objs里的最后一条记录 应为你的回调函数是最后执行的,这行循环早就执行完了,所以此时你再去取 temp的值肯定就是最后一条啦

了解一下闭包吧

这个如何改进了?麻烦告诉一下。

@guotingchaopr (function(t){ findOneById(objs[obj].id,function(findResult,query){ console.log(“id:”+query + " 是否有数据:"+(findResult!= null) ); if(findResult =="" || findResult ==null){ var instance = new Tweet(t); instance.save(); }

     });

})(temp);

这样试一下

@lastmemorys 好的 非常感谢!稍后我会着重学习下关于闭包的知识!

回到顶部