3

Meteor でクライアント側の再接続イベントを使用するにはどうすればよいですか。

クライアントでは、Meteor.apply は新しい待機オプションを使用します。これにより、このメソッドが終了するまで、それ以上のメソッド呼び出しがサーバーに送信されなくなります。ユーザー ID を明確に定義しておくために、ログインおよびログアウト メソッドに使用されます。接続を再確立するときに実行される onReconnect ハンドラを指定することもできます。Meteor アカウントはこれを使用して、再接続時に再度ログインします。

誰かが例を提供できますか。

これは、アカウント パッケージの例です。

  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 に答える