客户端上的Meteor.startup

时间:2014-02-12 07:33:59

标签: javascript node.js meteor npm

在客户端使用以下代码时,为什么init中的变量if(init)被评估为true,即使它位于init = true之前且没有新文档被添加到Orders集合中?这导致query.observe返回查询返回的所有文档,而不仅仅是新添加的文档。

在服务器端未观察到此行为,仅在添加新文档时执行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

})

1 个答案:

答案 0 :(得分:3)

这是因为服务器上的所有内容都是同步的,而客户端上的所有内容都是异步

init=true操作完成后将设置

query.observe,但在客户端之前可以设置它,因为init几乎会立即设置为true当观察手柄运行时。

您必须使用不同类型的行为才能使其以您期望的方式在客户端上运行。

也许在订阅完成后使用获取时间戳的内容,然后只在当前时间戳更高时才继续:

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);
}