Javascript Meteor onConnection客户端挂钩?
Meteor上客户端是否有onConnection钩子?这是我的问题: 我试图检测Meteor重新连接到服务器的任何时间,以便根据参数以编程方式重新订阅某些数据 Meteor实际上会自动重新订阅我的默认订阅,但我还有一个基于参数的Global订阅,在重新连接后不会重新加载:Javascript Meteor onConnection客户端挂钩?,javascript,meteor,Javascript,Meteor,Meteor上客户端是否有onConnection钩子?这是我的问题: 我试图检测Meteor重新连接到服务器的任何时间,以便根据参数以编程方式重新订阅某些数据 Meteor实际上会自动重新订阅我的默认订阅,但我还有一个基于参数的Global订阅,在重新连接后不会重新加载: Meteor.subscribe('Members', fnGetLastEvent()); 我想把它装在流星重联钩上,如果它存在的话。 提前谢谢 我没有一个直接的答案给你,但是这里有一些东西你可以试着看看它们是否适合你的
Meteor.subscribe('Members', fnGetLastEvent());
我想把它装在流星重联钩上,如果它存在的话。
提前谢谢 我没有一个直接的答案给你,但是这里有一些东西你可以试着看看它们是否适合你的特定用例 1) 在客户端设置自己的
onReconnect
回调函数
Meteor.onReconnect = function() {
console.log("meteor has reconnected);
// do stuff
};
我在一个Meteor应用程序的控制台上用Chrome开发者工具测试了这一点。我设置了onReconnect
回调,运行了Meteor.disconnect()
,然后运行了Meteor.reconnect()
,我的回调启动了。唯一需要注意的是,我不确定此回调是在连接建立之后运行还是在连接建立之前运行
2) 将您的subscribe
调用放入使用Meteor.status()
作为反应数据源的autorun
中。我在我的一个应用程序中做了一个类似的检查,检查Meteor是否未连接,然后显示一个模式,通知用户他们的数据不再是实时的。这里是我用来检测流星何时断开连接与何时重新连接的主要逻辑
var updateCountdownTimeout;
var nextRetry = new ReactiveVar(0);
Tracker.autorun(() => {
if (Meteor.status().status === 'waiting') {
updateCountdownTimeout = Meteor.setInterval(() => {
nextRetry.set(Math.round((Meteor.status().retryTime - (new Date()).getTime()) / 1000));
}, 1000);
} else {
nextRetry.set(0);
Meteor.clearInterval(updateCountdownTimeout);
}
if (!Meteor.status().connected && Meteor.status().status !== 'offline' && Meteor.status().retryCount > 0) {
console.log("Connection to server has been LOST!");
} else {
console.log("Connection to server has been RESTORED!");
// put subscription logic here
}
});
这里的警告是,我不确定第一次加载应用程序时会发生什么。我不确定你的订阅逻辑是否会运行,或者它是否只会在重新连接之后运行(你可以测试一下)
3) 这只是理论上的。似乎您应该能够将订阅参数存储在会话中
,并将订阅逻辑放入自动运行中
。重新连接后,自动运行理论上应再次运行。假设这是在模板的某个地方,那么它看起来是这样的
this.autorun(() => {
this.subscribe('Members', Session.get('sub_params'));
});
4) 您可以在上设置一些回调,这些回调可能会用到。可用选项包括消息
、重置
和断开
。我以前在消息
上使用过回调进行调试(见下文)
假设在重新建立连接时启动了onreset
,那么您可能可以将订阅逻辑放在那里
Meteor.connection._stream.on('reset', function () {
// subscription logic here
});
祝你好运 您能否将全局订阅参数存储在会话中
并在订阅中使用它(您的订阅需要包装在自动运行中
)。我很确定Meteor会在重新连接时重新运行所有依赖于反应数据源的反应计算(例如,会话
)。值得一试。你又做了一次@jordanwillis!我试过你的第四种选择,现在可以了,谢谢!这是我的代码(当重新连接发生时,我只在特定路由中重新订阅,否则我在切换路由时重新订阅):Meteor.connection.\u stream.on('reset',function(){if(Router.current().route.getName()=“eventContainer.:\u id”){alert(“重新连接.准备订阅:”+Router.current().params._id);Meteor.subscribe('Members',Router.current().params._id);})代码>对这个@jordanwillis有什么想法吗?=)看看我提交的关于这个问题的答案。
Meteor.connection._stream.on('reset', function () {
// subscription logic here
});