1

根据观察文档,我必须定义并调用停止函数,否则我的观察者将永远运行。关键是,例如,如果用户决定在预期时间之前关闭他的浏览器,如何调用停止?如果连接已死,我如何调用停止?

4

2 回答 2

3

您实际上不需要担心断开连接。任何时候订阅停止(无论是客户端断开连接、调用 unsub 还是您调用this.stop),服务器都会onStop在拆除活动订阅之前运行所有已注册的处理程序。(顺便说一句,断开连接时不会立即发生拆卸,但最终会发生。想法是稍等一下,以防客户端尝试重新连接并恢复其会话。)

您需要的是确保注册一个onStop处理程序来清理您的代码使用的任何资源。同样,这需要在订阅停止时发生。 onStop是正确的钩子。stop例如,就像在示例中的第一个代码节中一样,调用主动观察非常重要。

于 2013-02-27T23:02:55.573 回答
3

为此,您可以在发布中调用它:

this.session.socket.on("close", function() { /*do your thing*/});

所以,如果你想阻止观察者...

Meteor.publish("something", function () {

  // ...
  // your observers code here
  // ...

  self.onStop(function () {
    handle.stop();
  });
  this.session.socket.on("close", function() {
    handle.stop();
  });
});

答案在这里找到。感谢周华兵。

于 2012-10-16T17:27:32.460 回答