为什么 Meteor.user 和 Meteor.userId 不同?

Why Meteor.user and Meteor.userId differ?

我有拦截器:

Router.onBeforeAction(function() {
    if (!Meteor.userId()) {
        console.log("lets login");
        Router.go("login");
    } else {
        this.next();
    }
}, {
    except: ['login', 'signup']
});

它工作得很好,直到我将 !Meteor.userId() 替换为 Meteor.user()。似乎 .user 在刷新页面时未定义并将其重定向到我的登录页面。我的登录路由器也验证了 .user,这里是正确的。

为什么会有这种差异?

没错,Meteor.userId() returns id 而 Meteor.user() returns 对象。

然而,由于异步问题,返回一个对象 (Meteor.user()) 比返回一个 ID 花费更多的时间,到脚本运行时检查 if (!Meteor.user()) {...}, Meteor.user() 尚未处理并且还没回来!

因此,有几种方法可以解决该异步问题(例如,在 Meteor/React 应用程序中,我们可能有类似 subscribe,然后等待直到 handle ready)