Meteor发布错误 - 发布函数返回了一个非游标数组

时间:2015-11-03 07:46:18

标签: meteor

我有这个出版物

Meteor.publish('temsInThisCompetition', function (id) {
var teams = [];
return Competitions.find(id).fetch().map(function (doc) {
    for(var item in doc.teams){
        teams.push(Teams.find(item));
    }
    return teams;
});
});

但我收到此错误

 Exception from sub temsInThisCompetition id kDPuEbc9dtWn2tfT3 Error: Publish function returned an array of non-Cursors

2 个答案:

答案 0 :(得分:1)

这解决了我的问题

Meteor.publish('teamsInThisCompetition', function (id) {
var competition = Competitions.findOne(id);
return Teams.find({_id:{$in:competition.teams}});
});

答案 1 :(得分:0)

由于Meteor是异步的,因此您的初始代码不起作用,因为在for循环完成之前返回了team数组。

如果在异步环境中需要for循环,可以使用回调函数,如下所示:

function getTeams(id, callback) {
    Competitions.find(id).fetch().map(function (doc) {

        var teams = [];

        for(var item in doc.teams){
            teams.push(Teams.find(item));

            if(teams.length==doc.teams.length) {
                callback(teams);
            }
        }
    });
}

Meteor.publish('temsInThisCompetition', function (id) {
    getTeams(id, function(teams) {
        return teams;
    });    
});

没有回调的Collection.find()和Collection.findOne()是同步的,这就是你的答案中的代码没有返回空集的原因。