在客户端使用以下代码时,为什么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
})
答案 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);
}