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