2015-11-03 45 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()是同步的,這是爲什麼你的答案中的代碼沒有返回空集。