我试图通过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变量在服务器端被注意到没有会话更改?
答案 0 :(得分:0)
while !(Session.get 'graph_sub')
Meteor.setTimeout (Session.get 'graph_sub'), 1000
第二行不应该是Session.set
吗?否则,会话值将永远不会改变,而while循环将永远不会结束。
除了错字之外,我很困惑为什么你首先使用setTimeout
和graph_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。