Meteor - 如何知道Meteor.Collection.find方法是否完成?

时间:2014-08-09 14:18:49

标签: collections callback meteor

我正在使用Meteor开发一款小应用。当我使用这行代码时:

var currentTypingUsers = Utilites.findOne({title: "typingUsers"});

..要从数据库中获取currentTypingUsers值,它始终返回undefined。所以我想这里的问题是数据库还没准备好。所以我正在寻找一种在调用Utilites.findOne({title: "typingUsers"});后进行回调的方法。

在mongodb中,他们有这样的语法:collection.find(query, callback);但似乎Meteor.Collection不支持该语法。我仍然坚持这一点。

那么,你们可以帮助我吗,如何知道Meteor.Collection.find方法是否完成?非常感谢先进!

1 个答案:

答案 0 :(得分:1)

当Meteor尚未将其初始数据有效负载从发布发送到客户端时,您将得到未定义。

您可以执行以下操作:

utilitiesSub = Meteor.subscribe("utilities");

然后使用

if (utilitiesSub.ready()) { ... }

可能在Deps.autorun中最好。

所以要澄清一下,假设客户端正在发生这种情况,并不是因为.find()需要一段时间才能完成。事实上,客户端尚未收到来自服务器的所有收集数据,因此查找(实际上发生在客户端,您可以关闭服务器,它仍然可以工作)没有任何工作。

如果这在模板加载的初始阶段导致错误,那么我强烈建议使用iron-router及其waitOn函数。这使得这不那么痛苦。