流星:如何知道数据库准备就绪?
发布时间:2020-12-12 16:29:12 所属栏目:MsSql教程 来源:网络整理
导读:我想在页面加载后尽快执行Meteor集合查询.我尝试的第一件事是这样的: Games = new Meteor.Collection("games");if (Meteor.isClient) { Meteor.startup(function() { console.log(Games.findOne({})); }); } 这不行,虽然(它打
我想在页面加载后尽快执行Meteor集合查询.我尝试的第一件事是这样的:
Games = new Meteor.Collection("games"); if (Meteor.isClient) { Meteor.startup(function() { console.log(Games.findOne({})); }); } 这不行,虽然(它打印“未定义”).在JavaScript控制台调用时,相同的查询工作几秒钟.我认为数据库准备好之前有一些滞后.那么我怎么知道这个查询会成功? Meteor版本0.5.7(7b1bf062b9)在OSX 10.8和Chrome 25下. 解决方法您应该首先从服务器发布数据.if(Meteor.isServer) { Meteor.publish('default_db_data',function(){ return Games.find({}); }); } 在客户端上,只有在从服务器加载数据之后才执行集合查询.这可以通过在订阅呼叫中使用反应会话来实现. if (Meteor.isClient) { Meteor.startup(function() { Session.set('data_loaded',false); }); Meteor.subscribe('default_db_data',function(){ //Set the reactive session as true to indicate that the data have been loaded Session.set('data_loaded',true); }); } 现在当您执行收集查询时,您可以检查数据是否已加载: if(Session.get('data_loaded')){ Games.find({}); } 注意:删除autopublish包,它默认将所有的数据发布给客户端,并且是不好的做法. 要删除它,请从根项目目录中的每个项目执行$meteor remove autopublish. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |