流星在数据库连接后运行一个函数

Meteor run a function after database connection

本文关键字:一个 函数 数据库连接 运行 流星      更新时间:2023-09-26

我需要从数据库中读取并聚合一些结果,然后在客户机上设置一些响应变量。我只能在数据库连接完成后执行此操作。

我试着在onRendered中做,

Template.header.onRendered(function(){
    recalculate();
});

它在本地工作,但部署到meteor.com时不起作用。我应该在哪里进行函数调用?

onRendered回调与在线数据无关,它只是告诉您模板何时出现在DOM上(除非您传统地等待数据开始呈现)。

它在本地工作,因为数据到达非常快,可以在模板渲染之前准备好(这需要几毫秒)。
然而,在实际情况下出现延迟:数据需要一段时间才能到达。由于您使用了一种不恰当的方式来了解数据是否准备就绪,因此会出现问题。如果您使用任何其他类型的任意触发器,它也会同样失败:

setTimeout(recalculate, 150);

要知道数据库何时已连接,请使用订阅的内置ready回调:

var dataSub = Meteor.subscribe('my data', recalculate); //Method 1
Tracker.autorun(function(computation) {
  if(dataSub.ready()) {
    computation.stop();
    recalculate();
  }
}); //Method 2

选择两种方法中的一种。
第二个模块更加模块化,因为您可以让多个计算同时监视一个订阅。