循环进行mongoose操作为什么总是重复最后一条?见鬼!![CLOSED]
//我这里是想先查询数据库是否已经保护這条数据 如果没有的话 后再进行保存 防止重复
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 好的 非常感谢!稍后我会着重学习下关于闭包的知识!