查询Mongo在Meteor app中的Template.foo.onCreate中返回空数组

时间:2016-11-22 05:26:24

标签: mongodb meteor reactive-programming meteor-methods

我在Meteor项目中的client/main.js文件

中获取此代码
Template.panel.onCreated(function loginOnCreated() {
  var profile = Session.get('profile');

  this.myvar = new ReactiveVar(User.find({}).fetch());
});

User.find({})的结果为空。如果我在其他任何地方查询(包括meteor mongo),我会得到一个用户数组。

所以我想知道这个代码是在客户端运行这个问题是否存在问题。在同一个文件中,我将此查询在其他地方工作,但可能在服务器上下文中。

如果加载模板/页面后,如何使用Mongo结果填充此ReactiveVar

如果我在服务器端执行类似Meteor.startup()的操作:

console.log(User.find({}).count());

它为我提供了正确数量的用户。立即

@edit

如果我只添加一个setTimeout几秒钟(它不能是1秒钟,它需要一个longet时间),它可以在同一个地方工作。

Template.panel.onCreated(function loginOnCreated() {
//...
setTimeout(function(){
    template.timeline.set(User.find({}).fetch());
    console.log(timeline)
  },3000);
});

所以,有人知道为什么要让我做这个操作需要这么长时间?任何解决方法?

1 个答案:

答案 0 :(得分:0)

User.find({})。fetch()将仅提供服务器端的用户列表。

您可以编写一个meteor方法来获取服务器端的用户列表,并使用meteor.call进行调用。

在此调用的回调函数中,您可以将结果分配给所需的变量。