2015-11-03 61 views
0

我有此出版物的阵列流星出版物错误 - 发布函数返回非光标

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 

回答

1

这解决了这个问题对我来说

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

请注意,如果一个团队被添加到竞赛或从竞赛中删除,该刊物将不会更新。 – MasterAM

0

因为Meteor是异步的,所以你的初始代码不起作用,因为团队数组是在for循环完成。

如果你需要一个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()是同步的,这是为什么你的答案中的代码没有返回空集。