如何控制Meteor Session更新和数据库订阅延迟?

时间:2013-03-19 18:52:23

标签: meteor

我试图通过Meteor.autorun更改Collection(GraphData)订阅来限制客户端缓存。但我注意到服务器端只在会话(浏览器GUI)更改后才发布数据。这是对的吗?

在客户端,我有以下coffeescript代码:

Meteor.startup ->  
  Meteor.autorun () ->
    Meteor.subscribe 'graphdata', Session.get 'graph_name'

在一个函数draw_graph中,我有

Session.set 'graph_sub', false    
Session.set 'graph_name', item_name
ready = Session.get 'graph_sub'
while !(ready)    
  Meteor.setTimeout (ready = Session.get 'graph_sub'), 1000
Do something with the GraphData subscription

在服务器端我有

Meteor.startup ->  
  Meteor.publish 'graphdata', (name) -> 
    if name?
      GraphData.find({name: name})
      Session.set 'graph_sub', true

我期待在Session.set'graphit_name',item_name之后触发服务器端发布,但我注意到我陷入了while循环。

我的理解是否正确?无论如何强制Session变量在服务器端被注意到没有会话更改?

2 个答案:

答案 0 :(得分:0)

while !(Session.get 'graph_sub')    
  Meteor.setTimeout (Session.get 'graph_sub'), 1000

第二行不应该是Session.set吗?否则,会话值将永远不会改变,而while循环将永远不会结束。

除了错字之外,我很困惑为什么你首先使用setTimeoutgraph_sub。这不够吗?

if Meteor.isClient
  Meteor.startup ->
    Meteor.autorun ->
      Meteor.subscribe 'graphdata', Session.get 'graph_name'

if Meteor.isServer
  Meteor.startup ->
    Meteor.publish 'graphdata', (name) ->
      GraphData.find name: name

答案 1 :(得分:0)

我认为你应该在Do something with the GraphData subscription的回调中Meteor.subscribe

Meteor.startup ->  
  Meteor.autorun () ->
    Meteor.subscribe 'graphdata', Session.get 'graph_name', () ->
      Do something with the GraphData subscription

另请注意,自0.5.8以来,服务器端不再提供会话:https://github.com/meteor/meteor/blob/master/History.md#v058