【问题标题】:How does a publication onStop callback work in Meteor?发布 onStop 回调如何在 Meteor 中工作?
【发布时间】:2015-08-02 16:35:18
【问题描述】:

the Meteor documentation 之后,onStop() 函数执行:

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

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

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

  • 发布onStop() 是否会在用户离开它所附加的路径时触发?
  • 如果没有,是否有内置的 Meteor 机制来停止未使用的发布/订阅?如果是,它是如何工作的?是超时吗?
  • 是否有必要使用Cursor.observe()Cursor.observeChanges() 来使用/触发onStop() 回调?
  • 为什么当我关闭浏览器或标签页,或从当前用户帐户注销时,onStop() 回调未触发?

【问题讨论】:

  • 我认为您应该查看msavin:mongol 以跟踪您的出版物。这是客户端有史以来最有用的东西之一。
  • 注明。我使用了一段时间,但决定摆脱它,因为我观察到的收藏反馈有一种奇怪的行为。事实是我刚刚意识到它没有触发onStop(),因为我忘记在发布查询之前删除return。我会尝试找到我剩余问题的答案并将它们发布在这里,除非有人之前这样做过。事实证明,这是一个很好的解决方案:stackoverflow.com/questions/31557681/…
  • 我重新安装了msavin:mongol,确实很方便。谢谢@Kyll!

标签: meteor iron-router meteor-publications


【解决方案1】:

我发现它没有触发onStop(),因为我必须将我的发布查询移到onStop() 之后(因为查询在return 后面)。

但是,由于我的问题可能会引起某些人的兴趣,因此以下是答案:

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

是的。无论用户转到网站的另一条路线、关闭浏览器选项卡还是电量耗尽,这都是正确的。

是否有必要使用 Cursor.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();
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-07
    • 1970-01-01
    • 1970-01-01
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 2021-12-18
    • 2011-11-07
    相关资源
    最近更新 更多