根据observe docs,我必须定义并调用 stop 函数,否则我的观察者将永远运行。关键是,如果用户决定在预期时间之前关闭浏览器,那么如何调用 stop ?如果连接已经死了,我如何调用 stop ?
答案 0 :(得分: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();
});
});
回答here。谢谢周华兵。
答案 1 :(得分:3)
您实际上不需要担心断开连接。只要订阅停止(客户端断开连接,或调用unsub,或者您调用this.stop
),服务器将在拆除活动订阅之前运行所有已注册的onStop
处理程序。 (顺便说一下,断开时不会立即发生拆解,但最终会发生故障。想法是稍等一下,以防客户端尝试重新连接并恢复其会话。)
做需要做的是确保注册一个onStop
处理程序,清除代码使用的所有资源。同样,这需要在订阅停止时发生。 onStop
是正确的钩子。在活动观察上调用stop
非常重要,例如,就像示例中的第一个代码节一样。