javascript - 我将如何在加载模板上设置最小超时函数

标签 javascript meteor timeout preload

我想要一个加载模板,无论数据是否准备就绪,加载时间都最短。所以基本上运行加载模板 1 秒,即使加载了模板和订阅?

下面是我的路由器代码。

Router.configure({
  layoutTemplate: 'layout',
  loadingTemplate: 'loading',
  waitOn: function() { return Meteor.subscribe('contacts'); }
});

Router.map(function() {
  this.route('acorn', {path: '/'});
});

Router.onBeforeAction('loading');

最佳答案

您可以通过包装对 Meteor.subscribe 的调用并为订阅实例的 readystop 方法编写传递来实现此目的。您的 ready 版本只会在一秒钟过去并且包装的订阅准备就绪后返回 true。

您的waitOn 方法可能如下所示:

waitOn: function() {
    var sub = Meteor.subscribe("contacts");
    var dep = new Tracker.Dependency();
    var isSubReady = false;
    var hasWaitTimePassed = false;

    Meteor.setTimeout(function() {
        hasWaitTimePassed = true;
        dep.changed();
    }, 1000);

    Tracker.autorun(function() {
        isSubReady = sub.ready();
        dep.changed();
    });

    return {
        ready: function() {
            dep.depend();
            return hasWaitTimePassed && isSubReady;
        },
        stop: function() {
            sub.stop();
        }
    };
}

当然,如果你想在很多地方使用它,你会想把所有的逻辑包装到一个可重用的函数中,这样你就可以做类似的事情:

waitOn: function() {
    return subscribeWithDelay("contacts", 1000);
}

关于javascript - 我将如何在加载模板上设置最小超时函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26409297/

相关文章:

javascript - 对逗号赋值的困惑

javascript - 打印分层的 html5 Canvas

heroku - 如何在两个或多个 Heroku 测功机上运行 meteor 应用程序?

node.js - meteor 构建包没有响应

ssl - 使用 SSL 的雅司给出错误 "SSL accept failed: timeout"

javascript - 给定一个变量名称数组/列表,如果变量为 null,则将所有变量名称打印为字符串

javascript - if 中的单个等于。 Javascript。有什么好的理由吗?

javascript - 从 Meteor 中的集合文档返回单个值

javascript - 按下切换按钮时执行超时功能

php - Apache 和/或 PHP 超时 - 难住了。