Javascript 解析服务器原子增量结果
在我的解析后端中,我有一个数组,其中包含唯一的数字代码,因此用户不能两次获得相同的代码。由于这个原因,我在某个表的某个列的某个地方保留了这个数组的索引 现在有一个非常简单的操作-用户要求一个唯一的代码。cloud函数递增索引的当前值,并返回新索引处的数组值。问题是,乍一看,Parse JS API只执行了原子级的增量操作,而没有执行下面的读取操作,因为increment不会返回带有在该增量期间设置的值的承诺 现在想象以下场景(伪代码): 字段Javascript 解析服务器原子增量结果,javascript,parse-platform,parse-server,Javascript,Parse Platform,Parse Server,在我的解析后端中,我有一个数组,其中包含唯一的数字代码,因此用户不能两次获得相同的代码。由于这个原因,我在某个表的某个列的某个地方保留了这个数组的索引 现在有一个非常简单的操作-用户要求一个唯一的代码。cloud函数递增索引的当前值,并返回新索引处的数组值。问题是,乍一看,Parse JS API只执行了原子级的增量操作,而没有执行下面的读取操作,因为increment不会返回带有在该增量期间设置的值的承诺 现在想象以下场景(伪代码): 字段索引具有值76,两个用户试图同时获取下一个代码: Us
索引
具有值76
,两个用户试图同时获取下一个代码:
User1->increment('index')->save->then(obj1)->返回数组[obj1.index]
User2->increment('index')->save->then(obj2)->返回数组[obj2.index]
现在,原子增量将保证在这两次调用之后,索引列将具有值78
。但是obj1
和obj2
呢?如果它们的值读取不是与增量操作一起自动完成的,而是在执行增量后通过获取完成的,那么它们可能都有值78
!整个独特性逻辑将被打破
有没有办法在Parse中获得原子写入操作结果?Increment会返回原子递增的最终值:
fit('increment', (done) => {
new Parse.Object('Counter')
.set('value', 1)
.save()
.then(result => {
console.log('just saved', JSON.stringify(result));
return result
.increment('value')
.save();
})
.then(result => {
console.log('incremented', JSON.stringify(result))
expect(result.get('value')).toBe(2);
done();
})
.catch(done.fail);
});
- 转换为返回的mongo$inc操作
- 解释$inc的文档,其中包括“$inc是单个文档中的原子操作。”
增量确实返回原子递增的最终值:
fit('increment', (done) => {
new Parse.Object('Counter')
.set('value', 1)
.save()
.then(result => {
console.log('just saved', JSON.stringify(result));
return result
.increment('value')
.save();
})
.then(result => {
console.log('incremented', JSON.stringify(result))
expect(result.get('value')).toBe(2);
done();
})
.catch(done.fail);
});
- 转换为返回的mongo$inc操作
- 解释$inc的文档,其中包括“$inc是单个文档中的原子操作。”
试着回顾一下这个:谢谢,但我需要一些更具可读性和记忆性的东西,在我的例子中,这些是4位数试着回顾一下这个:谢谢,但我需要一些更具可读性和记忆性的东西,在我的例子中,这些是4位数要100%清楚:
increment()
是否更新并返回最终值,还是保存()
?i、 e.如果在增量
调用和保存
调用之间存在延迟,是否有可能外部更改影响结果?或者增量
是否标记对象进行增量,然后在保存
调用期间执行增量?如果两个或多个在保存调用之前,同一记录中的字段都标记为递增?1increment()
不执行更新,它只是在执行save
时将字段标记为increment。2.您可以为increment
标记所需的任意多个字段,它将按照您的预期工作。但不要相信我的话,试试看。要100%清楚:是增量()
更新并返回最终值,还是保存()
?i、 e.如果在增量
调用和保存
调用之间存在延迟,是否有可能外部更改影响结果?或者增量
是否标记对象进行增量,然后在保存
调用期间执行增量?如果两个或多个在保存调用之前,同一记录中的字段都标记为递增?1increment()
不执行更新,它只是在执行save
时将字段标记为increment。2.您可以为increment
标记所需的任意多个字段,它将按照您的预期工作。但不要相信我的话,试试看。