2014-04-23 97 views
0

如何验证Meteor.users集合已准备就绪?检查Meteor.users订阅是否已填充

我有一些代码设置在Meteor(发布0.7.0.1)启动在客户端上运行不正确,因为Meteor.users集合尚未填充。在此代码中,Meteor.users._connection.status().connected返回true,DDP._allSubscriptionsReady()返回false,因此Meteor.users.findOne调用即使返回用户也不会返回任何结果。

Meteor.startup(function() { 
    Deps.autorun(function() { 
     var userTracker = PersistentSession.get('userTracker'); 
     var userTrackerMissing = !userTracker; 
     var anonymousUserMissing = !Meteor.users.findOne({"_id": userTracker}); 

     if (Meteor.users._connection.status().connected) { 
      if (DDP._allSubscriptionsReady()) { 
       if (userTrackerMissing || anonymousUserMissing) { 
        Meteor.loginAnonymously(); 
       } 
      } 
     } 
    }); 
}); 
+0

您的问题是? –

+0

我修改了这个问题就更清楚了。 – MHinton

回答

0

我能够使用像这样的标准流星设施来解决这个问题。在服务器上,我发布了像这样的用户。

Meteor.startup(function() { 
    Meteor.publish("userData", function(userTracker) { 
     var user = Meteor.users.find({_id: userTracker}).fetch(); 
     return Meteor.users.find({_id: userTracker}, 
      { 
       fields: 
       { 
        'votes': 1 
       } 
      } 
     ); 
    }); 
}); 

在客户端上,我做了以下检查发布的userData是否可用。

Meteor.startup(function() { 
    Deps.autorun(function() { 
     var userTracker = PersistentSession.get('userTracker'); 
     var userTrackerMissing = !userTracker; 

     var userReady = Meteor.subscribe('userData', PersistentSession.get('userTracker')).ready(); 
     if (userReady) { 
      var anonymousUserMissing = !Meteor.users.findOne({"_id": PersistentSession.get('userTracker')}); 
      if (userTrackerMissing || anonymousUserMissing) { 
       Meteor.loginAnonymously(); 
      } 
     } 
    }); 
}); 
0

您可能会尝试使用fast-render包。它使Meteor.users集合从一开始就被填充。运行:

mrt add fast-render 

检查出this detailed article它是如何工作的。

相关问题