3

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

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

有人可以提供一个例子。

这是帐户包中的示例。

  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()吗?

4

1 回答 1

8

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

if (Meteor.isClient) {
    Tracker.autorun(function () {
        if (Meteor.status().connected) {
            console.log("connected");
        } else {
            console.log("disconnected");
        }
    });
}
于 2013-01-12T02:39:50.937 回答