如何验证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)
答案 1 :(得分:0)
我能够使用像这样的标准Meteor设施来解决这个问题。在服务器上我发布了这样的用户。
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();
}
}
});
});