gpt4 book ai didi

Meteor:我怎么知道数据库什么时候准备好?

转载 作者:行者123 更新时间:2023-12-03 21:14:54 25 4
gpt4 key购买 nike

我想在页面加载后尽快执行 Meteor 集合查询。我尝试的第一件事是这样的:

Games = new Meteor.Collection("games");
if (Meteor.isClient) {
Meteor.startup(function() {
console.log(Games.findOne({}));
});
}

但是,这不起作用(它打印“未定义”)。当从 JavaScript 控制台调用时,相同的查询会在几秒钟后生效。我认为在数据库准备好之前存在某种滞后。那么我怎么知道这个查询什么时候会成功呢?

OSX 10.8 和 Chrome 25 下的 Meteor 版本 0.5.7 (7b1bf062b9)。

最佳答案

你应该先publish来自服务器的数据。

if(Meteor.isServer) {
Meteor.publish('default_db_data', function(){
return Games.find({});
});
}

在客户端,只有在从服务器加载数据后才执行集合查询。这可以通过在 subscribe 中使用 react session 来完成。调用。
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在根项目目录中的每个项目上。

关于Meteor:我怎么知道数据库什么时候准备好?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15129827/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com