延迟流星函数加载

Delays meteor function loading

本文关键字:加载 函数 流星 延迟      更新时间:2023-09-26

我在我的html(Meteor Web应用程序)中有:

{{#each GetTasks _id}}

这将为每个_id运行 GetTasks 函数(顶部每个循环还有另一个循环)。因此,如果我有 5 个项目,它将运行 GetTasks 5 次。每个函数 GetTasks 都返回类似的东西

return Tasks.find({some query});

有没有办法将 GetTasks 延迟 5 次中的某些时间,例如第 3 次和第 4 次?我想更快地开始呈现第 1、2 和 5 个的信息,然后在超时加载有关第 3 个和第 4 个的信息(例如模仿延迟延迟加载样式)。谢谢

听起来像是一个疯狂的要求,但我认为这可以通过以下方式完成:

  1. 自定义的已发布集合
  2. 局部反应变量

我认为2.可能更容易,所以我会尝试描述这一点。

//...
GetTasks: function (id) {
    // Establishes reactive dependency
    var tasks = Tasks.find({some query}).fetch();
    // Use empty object as initial values
    var reactives = tasks.map(function (task) { return new ReactiveVar(task); });
    // Now reactives[0] corresponds to task 1, reactives[1] to task 2, etc.
    // Unset any values you want to appear later:
    reactives[3].set({});
    reactives[4].set({});
    // Schedule them to be set later (using 5 seconds here)
    Meteor.setTimeout(function () {
        reactives[3].set(task[3]);
        reactives[4].set(task[4]);
    }, 5000);
    return reactives.map(function (r) { return r.get(); });
}

每次从服务器发布任务数据并且与您的查询匹配时,都会运行此操作。 这意味着您每次都会设置超时。

可能你想做的是:

  • 跟踪已设置的超时
  • 每次 GetTasks 运行时,请检查您是否已经为该任务设置了超时
  • 决定是要覆盖它还是保留它

请记住,旧超时将保留旧值。 如果新运行提供新值,则旧值可能已过时。

另请注意,在实现中,我给出的旧任务没有保留。 如果任务的位置可能发生变化,例如,如果任务被删除,则可能需要执行此操作。 然后,您可以测试新旧的变化,并决定要执行的操作。