簡體   English   中英

檢查是否填充了Meteor.users訂閱

[英]Check if the Meteor.users subscription is populated

如何驗證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();
                }
            }
        }
    });
});

您可以嘗試使用fast-render包。 它使Meteor.users集合從一開始就被填充。 跑:

mrt add fast-render

查閱有關其工作原理的詳細文章

我能夠使用這樣的標准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();
            }
        }
    });
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM