Javascript 延迟流星函数加载

Javascript 延迟流星函数加载,javascript,meteor,Javascript,Meteor,我的html(meteor web应用程序)中有: 这将为每个_id运行gettask函数(顶部有另一个each循环)。 因此,如果我有5个项目,它将运行5次。每个函数返回如下内容 return Tasks.find({some query}); 是否有任何方法可以将gettask延迟5次,例如第3次和第4次?我想开始更快地显示第1次、第2次和第5次的信息,然后在超时后加载关于第3次和第4rth的信息(如immiting lazy delayed load style)。 谢谢听起来像是一个疯

我的html(meteor web应用程序)中有:

这将为每个_id运行gettask函数(顶部有另一个each循环)。 因此,如果我有5个项目,它将运行5次。每个函数返回如下内容

return Tasks.find({some query});
是否有任何方法可以将gettask延迟5次,例如第3次和第4次?我想开始更快地显示第1次、第2次和第5次的信息,然后在超时后加载关于第3次和第4rth的信息(如immiting lazy delayed load style)。
谢谢

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

  • 自定义的、已发布的集合
  • 局部无功var
  • 我想是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(); });
    }
    
    每次从服务器发布任务数据并且任务数据与您的查询匹配时,都会运行此操作。这意味着您每次都要设置一个超时

    您可能想做的是:

    • 跟踪已设置的超时
    • 每次运行GetTask时,检查您是否已经为该任务设置了超时
    • 决定是覆盖它,还是保留它
    请记住,旧超时将保留旧值。如果新运行提供了新值,则旧值可能已过时

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

    //...
    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(); });
    }