在异步进程中保存同步(不重复)信息
save synchronous (not duplicate) information in a asynchronous process
对于这个MEAN Stack项目,我想用保存在相同的集合文档中
- 不同类型
- 每个类型唯一的按时间顺序排列的数字
示例:
{ID:1,类型:"a",时间:1}
{ID:2,类型:"b",时间:1}
{ID:3,类型:"b",时间:2}
{ID:4,类型:"a",时间:2}
{ID:5,类型:"b",时间:3}
在前端,我使用循环
for ( var i++; i < type.length; i++) // lets say Document type = ["a", "b"]
for (var j++; j< 100; j++) // Creates 100 documents
// Front end service request directing to the NodeJS Server to create a document
serverDocument.createDocument(dataS).success(function(dataR){
counterDOC ++;
$scope.documentID= dataR._id;
}
nodeJS服务器正在DB中查找所选文档类型的最后一个Chrono编号,并添加1。
doc = new db.Document (req.body); // req.body is for example {type: 'a'}
doc.save();
getChrono (doc); // home made function
获取Chrono功能:
var getChrono = function(doc){
var config=
{
type : doc.type,
}
query = db.Document.findOne(config).sort({$natural:-1});
query.exec(function (err, chrn){
doc.chrono = 1;
if (chrn != null)
if(chrn.chrono != null)
doc.chrono= chrn.chrono+1;
doc.update();
});
结果与此类似:
{ID:1,类型:"a",时间:1}
{ID:2,类型:"a",时间:1}
{ID:3,类型:"a",时间:1}
{ID:4,类型:"a",时间:1}
{ID:5,类型:"a",时间:2}。。。当然,对象ID是唯一的,但按时间顺序排列的数字对于一种类型的文档来说并不是唯一的。
据我所知,当下一个请求启动时,这些信息还没有保存在DB中。因此,DB中的"最后一个计时数字"并不是现实中的最后一个计时器数字。
有人能找到解决这个问题的方法吗?我不想在前端端使用同步解决方案,让服务器端管理时间编号是合乎逻辑的
递增chrono
后,可以进行save
单据
因此,低于saveDoc
将起作用。
function saveDoc(docBody,callback){
var query = db.Document.findOne({type:docBody.type}).sort({chrono:-1});// I guess $natural is not that reliable
query.exec(function (err, chrn){
if(err)
return callback(err);
docBody.chrono = chrn && chrn.chrono != null?chrn.chrono+1:1;
var doc = new db.Document(docBody); // Doc created here after getting chrono
doc.save(callback);
});
}
然后调用具有请求体的功能
saveDoc(req.body,function(){
console.log('saved');
});
相关文章:
- 访问布局信息是否也会导致浏览器重排
- 在控制器和数据对象之间同步数据
- 同步调用,直到用户通过angular验证为访问者
- 定义完全独立的样式信息
- javascript函数同步
- 使用html2canvas获取基本信息
- JS表单提交"无法使用Chrome数据保护程序加载此页面.尝试重新加载页面.调试信息:POST CISmtuK
- 从信息框调用弹出图像库
- 如何在不传递此信息的情况下查找被调用的元素
- 与运行长作业(javascript,node.js)的第三方API同步的最佳实践
- 将谷歌自动完成地址信息放在页面上,而不是表格中
- 显示具有服务器端自动时间注销的同步倒计时计时器
- 如何将Knockout.JS与服务器已经在DOM中呈现的数据同步
- 如何通过解析类信息来使用jQuery创建类
- 音频和动画在javasctipt循环中同步
- 主线程上的同步XMLHttpRequest已弃用
- 包含数据库中相关信息的开放模态
- 单击按钮即可在浏览器的新选项卡中打开 Sapui5 详细信息页面
- 为用户在webapp(iphone, droid, blackberry)和互联网之间同步信息
- 在异步进程中保存同步(不重复)信息