【问题标题】:Meteor subscription not readyMeteor 订阅尚未准备就绪
【发布时间】:2015-04-30 15:21:14
【问题描述】:

我的 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,未记录“就绪”且 doSomething() 未运行。

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

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

任何帮助将不胜感激。

【问题讨论】:

  • ticketSubscriptionHandle 对象在您的主页自动运行中是否可用? Coffeescript 可能存在范围问题。
  • 是的,它可用。
  • 我想我已经深入了解了...我的应用程序使用 Bootstrap 轮播来旋转一系列 D3 图表。这些图表填充了基于selectedSquad 的数据。完成一个周期后,selectedSquad 切换并为下一个小队请求数据。似乎我的来自 JIRA API 的数据现在被检索得更慢了,导致轮播在数据呈现之前循环和切换小队,让我一直处于被动重新加载的循环中。这就解释了为什么这似乎在没有更改代码的情况下就崩溃了。谢谢你们的帮助,伙计们。

标签: meteor subscription


【解决方案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 不是反应变量。

【讨论】:

  • 我可以确认第一个自动运行在主页上的自动运行之前执行。对于您的另一点,ticketSubscriptionHandle 本身不是反应性的,但 .ready() 方法是,根据 discovermeteor.com/blog/…
  • 关于我的另一点:是的,第二次自动运行将在订阅句柄的ready 方法中正确注册一个依赖项,当重新执行第一次自动运行时,ticketSubscriptionHandle 将获得一个新值,但是您的第二次自动运行所依赖的任何依赖项都不会改变,因此不会重新执行。
猜你喜欢
  • 1970-01-01
  • 2017-12-02
  • 1970-01-01
  • 1970-01-01
  • 2020-09-22
  • 2022-11-25
  • 1970-01-01
  • 1970-01-01
  • 2012-02-15
相关资源
最近更新 更多