流星订阅尚未准备好

时间:2015-02-27 19:48:03

标签: meteor subscription

My Meteor应用程序,直到最近才运行良好,最近停止了工作,尽管应用程序没有更改代码。我已经确认这个问题存在于具有两种不同操作系统的三台不同机器上,因此我认为这不是硬件/软件问题。

主要问题(是的,存在多个问题)是我的订阅未被识别为“就绪”,即使发布已标记为已准备好且我的记录在客户端中可用。

这是我的代码:

发布:

Meteor.publish 'tickets', (selectedSquad) ->
  self = this
  unformattedTickets = [ array of objects coming from JIRA API ]
  _(unformattedTickets).forEach (issue) ->
    doc =
      normalizedColumn1: issue.fields.col
      ...
    self.added 'tickets', Random.id(), doc
  console.log 'publish ready'
  self.ready()

订阅:

Tracker.autorun ->
  @ticketSubscriptionHandle = Meteor.subscribe('tickets', Session.get('selectedSquad'))

主页自动运行:

Tracker.autorun ->
  if ticketSubscriptionHandle.ready()
    console.log 'ready'  
    doSomething()

我可以在我的服务器中看到'发布就绪',我可以在我的控制台中查询Tickets.find(),但ticketSubscriptionHandle.ready()返回false,'ready'未记录且doSomething()没有'跑。

据我所知,我正在使用完全按照文档中指定的订阅/自动运行。我也不明白如果不修改代码或正在使用的流星版本,这可能会停止工作。

如果您想查看完整的代码库,可以在https://github.com/jprince/kanburn的GitHub上找到

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:1)

这不是一个答案,但它可能对你有帮助。

请注意以下代码:

Tracker.autorun ->
  @ticketSubscriptionHandle = Meteor.subscribe('tickets', Session.get('selectedSquad'))

必须在以下代码之前执行:

Tracker.autorun ->
  if ticketSubscriptionHandle.ready()
    console.log 'ready'  
    doSomething()

是这样的吗?即使是这样,仍然存在问题。执行Session.set('selectedSquad', "a-new-value")时,第一次自动运行将重新运行。你期待其他自动运行重新运行,对吧?它不会,因为ticketSubscriptionHandle不是一个反应变量。