我最近解决了我的程序中导致重复收集条目的问题。它的要点:我们的代码库有一个“CreateDocument”方法,用于检查对象的存在,如果没有返回,则创建一个新文档。 (CV是一种猫鼬模型)
CV.findOne(searchObj).exec().then(function (found)
{
if (found)
{
//~do processing~
}
//did not find the value, so create
else
{
var newCV = new CV({
foo: "foo",
bar: "bar"
});
newCV.save();
}
此代码第一次运行时,错误地调用了两次事件,因此,我们的所有结果都是重复的。后续运行(甚至在双被调用事件被修复之前)没有创建其他文档。
我可以想到,这个重复发生的原因是在第一次save()调用成功之前发生了两个findOne()调用。
一般来说,如何在不担心遇到问题的情况下进行这种条件创作?