我有这个出版物
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
答案 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()是同步的,这就是你的答案中的代码没有返回空集的原因。