Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/meteor/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Meteor 流星订阅尚未准备就绪_Meteor_Subscription - Fatal编程技术网

Meteor 流星订阅尚未准备就绪

Meteor 流星订阅尚未准备就绪,meteor,subscription,Meteor,Subscription,我的Meteor应用程序直到最近都运行良好,但最近停止了工作,尽管应用程序没有代码更改。我已经确认了这个问题存在于三台不同的机器上,它们有两种不同的操作系统,所以我认为这不是硬件/软件问题 主要问题(是的,有不止一个问题)是我的订阅未被识别为“就绪”,即使发布已标记为就绪,并且我的记录在客户端中可用 这是我的密码: 出版: Meteor.publish 'tickets', (selectedSquad) -> self = this unformattedTickets = [

我的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()
我可以在我的服务器“publish ready”中看到,我可以在我的控制台中查询
Tickets.find()
,但是
ticketsSubscriptionHandle.ready()
返回false,“ready”未被记录,并且
doSomething()
未运行

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

如果您想查看完整的代码库,可以在GitHub上的


任何帮助都将不胜感激。

这不是答案,但可能会对您有所帮助

请注意,以下代码:

Tracker.autorun->
@ticketSubscriptionHandle=Meteor.subscribe('tickets',Session.get('selectedSquad'))
必须在以下代码之前执行:

Tracker.autorun->
if ticketSubscriptionHandle.ready()
console.log“就绪”
doSomething()

是这样吗?即使是这样,仍然存在一个问题。执行
Session.set('selectedSquad',“a-new-value”)
时,第一次自动运行将重新运行。你希望另一个自动运行也能重新运行,对吗?它不会,因为
ticketSubscriptionHandle
不是一个被动变量。

ticketSubscriptionHandle对象在您的主页自动运行中是否可用?你可能对Coffeescript的作用域有问题。是的,它是可用的。我想我已经找到了问题的根源。。。我的应用程序使用一个引导旋转木马来旋转一系列D3图表。这些图表根据
selectedband
填充数据。完成一个周期后,
selectedband
切换,并为下一个班次请求数据。似乎我的数据(来自JIRA API)现在被检索得更慢了,这导致旋转木马在数据呈现之前循环切换队列,给我留下了一个反应性重新加载的永久循环。这就解释了为什么代码没有改变,这看起来就坏了。谢谢你们的帮助,伙计们。我可以确认第一次自动运行是在主页上的自动运行之前执行的。另一方面,ticketSubscriptionHandle本身不是被动的,但是
.ready()
方法是,正如关于我的另一点:是的,第二次自动运行将正确地在subscriptionhandle的
ready
方法中注册依赖项,并且当第一次自动运行重新执行时,
ticketSubscriptionHandle
将获得一个新值,但第二次自动运行所依赖的依赖关系不会改变,因此不会重新执行。