我想通過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'graph_name',item_name之後觸發服務器端發佈,但我注意到了我陷入了while循環。
我的理解是否正確?無論如何強迫會話變量更改得到服務器端沒有會話更改注意到?
循環'ready = false; setTimeout(( - > ready = true),1000)直到ready就不會像你想的那樣工作,它會導致內部的'( - > ready = true)'被稱爲bazillion times。 (編輯:把它寫成一行代碼,以適應這種單行註釋格式;編譯成JS以更清楚地看到問題。) – 2014-06-04 09:39:33
很明顯,你不會在你提供的單行版本中工作,因爲準備不會從不改變。在我的代碼中,我希望一旦服務端將graph_sub設置爲true,就可以將其更改爲true。我原來的問題是關於服務器端未能將graph_sub設置爲true。 – Jules 2014-06-05 13:40:03
是的,這可能有點OT,但我確實認爲'ready'最終應該在一秒鐘後改變(如果它達到那麼多,那麼會再次改變十億次),直到那時'setTimeout'已經通過'while'循環可怕的次數。 – 2014-06-08 13:09:29