我有一个页面列出了公司的个人资料并显示了其未完成的工作。我使用iron-router来获取公司的个人资料信息,但是一旦页面加载,就使用Meteor.call来获取活动作业。但是,当我返回一个游标时,它会抛出超出错误的堆栈大小。
organization.js
Template.organization.rendered = function() {
Meteor.call('getActiveJobs', function(error, jobs){
if(error){
console.log(error);
} else {
console.log(jobs);
}
});
}
集合
Meteor.methods({
.....
getActiveJobs: function(){
return Jobs.find({organizationId: user.profile.organizationId});
}
.....
});
这会引发" RangeError:超出最大调用堆栈大小"错误。
但是,我可以返回
return Jobs.find({organizationId: user.profile.organizationId}).fetch();
没有错误,但我尝试返回光标,以便使用把手更容易,但我不太明白为什么我会收到此错误。
答案 0 :(得分:1)
请注意,您的方法返回的值需要以JSON格式从服务器传输到客户端。因此,你不能返回不是JSON可序列化的对象(这里有一些小例外,但我们现在可以忘记它们了。)
如果您想要返回光标,则应使用Meteor.publish
代替Meteor.methods
,所以
Meteor.publish('activeJobs', function () {
var user = Meteor.users.findOne({_id: this.userId});
return Jobs.find({organizationId: user.profile.organizationId});
});
另外,请记住在需要此数据集时立即在客户端上调用Meteor.subscribe('activeJobs')
。