有时Meteor.users.findOne(用户名:' john')返回undefined?

时间:2015-12-22 02:14:50

标签: meteor

我不确定为什么这段代码会偶尔运行一次并在其他时间失败:

var u = Meteor.users.findOne(username:'john');
console.log(u);

当我第一次访问我的页面时,有时候console.log(u)会显示一些结果。但是如果我按下刷新,console.log(u)显示未定义。我无法一致地重现一个问题或另一个问题。当我得到未定义或集合时,它似乎很随机。我的代码出了什么问题?如何始终获取变量u的集合?

1 个答案:

答案 0 :(得分:2)

就像克里斯蒂安弗里茨在评论你的问题时说的那样,当你的代码被执行时,它可能不是完全加载的集合问题。如果您使用iron:router,则可以使用subscribewaitOn,如下所述:http://iron-meteor.github.io/iron-router/#the-waiton-option因此只有在集合准备就绪时才会加载页面(意味着它们已完全加载) 。 您也可以将它放在帮助器中或使用Tracker Autorun来检测您的条目何时可用,然后执行您想要执行的任何操作。

编辑:铁的示例:路由器

// myproject.jsx

var Cars = new Mongo.Collection('cars');
if(Meteor.isServer)
{
    Meteor.publish("myCollections", function () {
        return Meteor.users.find();
    });
    Meteor.publish("anotherCollection", function(){
      return Cars.find();
    });
}

//lib/router.js

Router.route('/my-page', {
    name: 'myPage',
    layoutTemplate: 'myPage',
    waitOn: function() {
        'use strict';
        return [Meteor.subscribe('myCollection'),Meteor.subscribe('anotherCollection')];
    },
    data: function() {
        'use strict';
        return Collection.findOne();
    }
});