返回游标结果会导致“堆栈大小超出”错误

时间:2014-08-05 22:10:47

标签: meteor

我有一个页面列出了公司的个人资料并显示了其未完成的工作。我使用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();

没有错误,但我尝试返回光标,以便使用把手更容易,但我不太明白为什么我会收到此错误。

1 个答案:

答案 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')