Javascript 在客户端上启动Meteor.startup
在客户端使用以下代码时,为什么Javascript 在客户端上启动Meteor.startup,javascript,node.js,meteor,npm,Javascript,Node.js,Meteor,Npm,在客户端使用以下代码时,为什么if(init)中的变量init被评估为true,即使它位于init=true之前,并且没有新文档添加到订单集合中?这将导致查询。请注意返回查询返回的所有文档,而不仅仅是新添加的文档 在服务器端没有观察到这种行为,它仅在添加新文档时执行console.log Meteor.startup(function() { var init = false var query = Orders.find() var handle = query.ob
if(init)
中的变量init
被评估为true
,即使它位于init=true
之前,并且没有新文档添加到订单
集合中?这将导致查询。请注意
返回查询返回的所有文档,而不仅仅是新添加的文档
在服务器端没有观察到这种行为,它仅在添加新文档时执行console.log
Meteor.startup(function() {
var init = false
var query = Orders.find()
var handle = query.observe({
added: function (doc) {
if(init)
console.log(doc)
}
});
init = true
})
这是因为服务器上的一切都是同步的,而客户端上的一切都是异步的
init=true
将在查询后设置。observe
操作完成后,但在客户端上,可以在此之前将其设置为init
将设置为true
,几乎与observe句柄运行时一样
您必须使用另一种行为,使其以您期望的方式在客户机上工作
可能在订阅完成后使用获取时间戳的内容,然后仅在当前时间戳较高时继续:
Meteor.subscribe("yourdocs", function() {
Session.set("yourdocs_finishtime", new Date().getTime());
});
然后添加句柄:
added: function (doc) {
var subtime = Session.get("yourdocs_finishtime");
if(subtime && (subtime < new Date().getTime()))
console.log(doc);
}
新增:功能(doc){
var subtime=Session.get(“yourdocs_finishtime”);
if(subtime&(subtime