我不确定为什么这段代码会偶尔运行一次并在其他时间失败:
var u = Meteor.users.findOne(username:'john');
console.log(u);
当我第一次访问我的页面时,有时候console.log(u)
会显示一些结果。但是如果我按下刷新,console.log(u)
显示未定义。我无法一致地重现一个问题或另一个问题。当我得到未定义或集合时,它似乎很随机。我的代码出了什么问题?如何始终获取变量u
的集合?
答案 0 :(得分:2)
就像克里斯蒂安弗里茨在评论你的问题时说的那样,当你的代码被执行时,它可能不是完全加载的集合问题。如果您使用iron:router
,则可以使用subscribe
或waitOn
,如下所述: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();
}
});