如何在Meteor中使用客户端重新连接事件

时间:2013-01-04 00:02:06

标签: meteor reconnect

如何在Meteor中使用客户端重新连接事件。

  

在客户端,Meteor.apply采用新的等待选项,确保   在此方法之前,不会向服务器发送进一步的方法调用   完了;它用于登录和注销方法以保持   用户ID定义明确。您还可以指定onReconnect处理程序   在重新建立连接时运行;流星帐户使用   这将重新连接重新登录。

有人可以提供一个例子。

以下是帐户包中的示例。

  Accounts._makeClientLoggedIn = function(userId, token) {
    Accounts._storeLoginToken(userId, token);
    Meteor.default_connection.setUserId(userId);
    Meteor.default_connection.onReconnect = function() {
      Meteor.apply('login', [{resume: token}], {wait: true}, function(error, result) {
        if (error) {
          Accounts._makeClientLoggedOut();
          throw error;
        } else {
          // nothing to do
        }
      });
    };
    userLoadedListeners.invalidateAll();
    if (currentUserSubscriptionData) {
      currentUserSubscriptionData.handle.stop();
    }
    var data = currentUserSubscriptionData = {loaded: false};
    data.handle = Meteor.subscribe(
      "meteor.currentUser", function () {
        // Important! We use "data" here, not "currentUserSubscriptionData", so
        // that if we log out and in again before this subscription is ready, we
        // don't make currentUserSubscriptionData look ready just because this
        // older iteration of subscribing is ready.
        data.loaded = true;
        userLoadedListeners.invalidateAll();
      });
  };

我假设您不能只定义另一个default_connection.onReconnect,如果您希望帐户仍然有效吗?

感谢。

修改

考虑一下,而不是使用onReconnect你可能应该使用Meteor.status()代替吗?

1 个答案:

答案 0 :(得分:7)

哈利,我在上面看到了你的评论并做了这个改变。我认为你是对的。由于Meteor.status是一个反应变量,因此只要连接状态发生变化,它就会重新运行。

if (Meteor.isClient) {
    Tracker.autorun(function () {
        if (Meteor.status().connected) {
            console.log("connected");
        } else {
            console.log("disconnected");
        }
    });
}