集合转换中的联合对象未定义

时间:2016-04-19 10:23:46

标签: meteor

我的这个出版物有加入转换

export var Posts = new Mongo.Collection<Post>(‘posts', {
  transform: function(doc) {
    doc.user = Meteor.users.findOne(doc.userId);
    doc.category = Categories.findOne(doc.categoryId);
    return doc;
  }
});

这适用于autopublish,但没有它,类别对象是未定义的,有人可以帮我理解为什么吗? 注意:是的我发布并订阅了帖子和类别,我得到的是联合用户对象,但不是类别对象。

1 个答案:

答案 0 :(得分:0)

这是因为transform函数不会等待加载所有其他集合。 不要依赖posts函数中的其他集合。

当您的transform收集数据到达客户端时,Meteor会执行Categories功能。这可能是在findOne同步之前,以及undefined返回Categories的方式。稍后,当transform数据最终下载到客户端时,createComponent函数不会被重新排序。我想这是因为重新评估这些功能很容易就会陷入无休止的循环中。

对于这个问题,我可以想到两个很好的解决方案:

  • reywood:publish-composite包在服务器端执行
  • 等待加载所有集合,然后在客户端json_decode中合并它们(假设您使用React)。