Meteor中的发布顶部回调如何工作?

Meteor中的发布顶部回调如何工作?,meteor,iron-router,meteor-publications,Meteor,Iron Router,Meteor Publications,下面是onStop()函数的作用: 注册一个回调函数以在订阅停止时运行 现在,我尝试在我的出版物中使用此onStop()函数跟踪离开页面的用户 我希望它能直接工作,因为订阅是在模板路由控制器中调用的,而我发布的集合在页面离开后就不可用。但我在这里是因为即使发布在客户端上不再处于活动状态,也不会触发onStop()。我不确定它是如何工作的,因此以下是问题: 如果用户离开所连接的路线,是否会触发出版物onStop() 如果没有,是否有内置的Meteor机制来停止未使用的酒吧/酒吧?如果是,它是如何

下面是
onStop()
函数的作用:

注册一个回调函数以在订阅停止时运行

现在,我尝试在我的出版物中使用此
onStop()
函数跟踪离开页面的用户

我希望它能直接工作,因为订阅是在模板路由控制器中调用的,而我发布的集合在页面离开后就不可用。但我在这里是因为即使发布在客户端上不再处于活动状态,也不会触发
onStop()
。我不确定它是如何工作的,因此以下是问题:

  • 如果用户离开所连接的路线,是否会触发出版物
    onStop()
  • 如果没有,是否有内置的Meteor机制来停止未使用的酒吧/酒吧?如果是,它是如何工作的?是超时吗
  • 是否需要使用
    游标.observe()
    游标.observeChanges()
    来使用/触发
    onStop()
    回调
  • 为什么当我关闭浏览器或选项卡,或从当前用户帐户注销时,
    onStop()
    回调没有触发

我发现它没有触发
onStop()
,因为我必须将发布查询移动到
onStop()
之后(因为查询位于
返回的后面)

然而,由于我的问题可能会引起一些人的兴趣,以下是答案:

如果用户离开它所连接的路由,是否会触发发布在顶部()

对。无论用户转到网站的另一条路线、关闭浏览器选项卡或电池耗尽,都是如此

是否需要使用游标.observe()或 Cursor.observeChanges()是否使用/触发onStop()回调

没有

为什么在关闭浏览器或浏览器时未触发onStop()回调 选项卡,或从我的当前用户帐户注销

事实上,在所有这些情况下都会触发这种情况。以下是如何使用
onStop()
查看基本出版物,当用户未填写相关表单并在未提交的情况下离开页面时,我使用该出版物来处理上载文件的删除:

Meteor.publish("files", function(sessionId) {
  var self = this;

  // Here I clean all the files I need to remove because the user has
  // not submitted the current form. 
  self.onStop(function () {
      console.log (sessionId + " is cleaning...");
      cleanFiles(sessionId)
  });

  // I look for files related to the current upload session only
  if(Users.isInRoles(this.userId, ["user"])) {
    return Files.find({"session_id":sessionId, "owner":this.userId}, {});
  }
  //and I make my publication available in case the if failed
  return self.ready();
});

我想你应该看看
msavin:mongol
来跟踪你的出版物。这是客户端有史以来最有用的东西之一。我用了一段时间,但由于在我观察到的收集反馈中出现了一种奇怪的行为,我决定把它扔掉。事实上,我刚刚意识到它没有触发
onStop()
,因为我忘记了在发布查询之前删除
返回值。我会尽量找到我剩下的问题的答案,并把它们贴在这里,除非有人以前这样做过。这是一个很好的解决方案:我重新安装了
msavin:mongol
,它确实非常方便。谢谢@Kyll!