我正在使用Meteor开发一款小应用。当我使用这行代码时:
var currentTypingUsers = Utilites.findOne({title: "typingUsers"});
..要从数据库中获取currentTypingUsers
值,它始终返回undefined
。所以我想这里的问题是数据库还没准备好。所以我正在寻找一种在调用Utilites.findOne({title: "typingUsers"});
后进行回调的方法。
在mongodb中,他们有这样的语法:collection.find(query, callback);
但似乎Meteor.Collection
不支持该语法。我仍然坚持这一点。
那么,你们可以帮助我吗,如何知道Meteor.Collection.find
方法是否完成?非常感谢先进!
答案 0 :(得分:1)
当Meteor尚未将其初始数据有效负载从发布发送到客户端时,您将得到未定义。
您可以执行以下操作:
utilitiesSub = Meteor.subscribe("utilities");
然后使用
if (utilitiesSub.ready()) { ... }
可能在Deps.autorun中最好。
所以要澄清一下,假设客户端正在发生这种情况,并不是因为.find()需要一段时间才能完成。事实上,客户端尚未收到来自服务器的所有收集数据,因此查找(实际上发生在客户端,您可以关闭服务器,它仍然可以工作)没有任何工作。
如果这在模板加载的初始阶段导致错误,那么我强烈建议使用iron-router及其waitOn函数。这使得这不那么痛苦。