2

遵循Meteor 文档,该onStop()函数执行以下操作:

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

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

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

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

1 回答 1

1

我发现它没有触发,因为我必须在之后onStop()移动我的发布查询(因为查询在 a 后面)。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();
});
于 2015-08-01T17:20:00.867 回答