Jquery:添加延迟

时间:2013-11-14 11:26:04

标签: jquery

我正在使用jQuery .then按顺序加载我的脚本。然而,对服务器CPU的即时轰炸仍然太高了。我试过在.then之后添加.delay就像这样:

siteVisits()
    .then(siteTerms)
    .delay(30000)
    .then(siteSources)
    .delay(30000)
    .then(siteBrowsers)
    .delay(30000)
    .then(siteCountries)
    .delay(30000)
    .then(siteContent);

但是我收到了这个错误:

Uncaught TypeError: Object #<Object> has no method 'delay' 

有没有人知道如何在调用每个函数之前添加延迟?

提前致谢

2 个答案:

答案 0 :(得分:0)

这不像.delay工作,应该只用于延迟动画,因为这种延迟你将不得不使用setTimeout();

siteVisits()
    .then(function() {
        setTimeout(function() {
            siteTerms.then(function() {
                setTimeout(function() {
                    siteTerms.then()
                }, 30000);
            })
        }, 30000);
     });

但为什么要延迟?

答案 1 :(得分:0)

在这里使用延迟是错误的,它们是为完全不同的问题而创建的。不要仅仅因为你喜欢花哨的语法而将延迟拖延到它们中。

function DelayedExecutor(delay) {
    var self = this, queue = [], id;

    function runNext() {
        var def = queue.shift();
        if (def && typeof def.func === "function") {
            def.func.apply(def.context, def.args);
        }
        if (queue.length === 0) {
            id = clearInterval(id);
        }
    }

    this.add = function (func, args, context) {
        queue.push({func: func, args: args, context: context});
        if (!id) {
            id = setInterval(runNext, delay);
            runNext();
        }
        return self;
    };
}

var de = new DelayedExecutor(30000);  /* new and improved model! */
de.add(siteTerms /*, [arguments], thisArg */);
de.add(siteSources);
de.add(siteBrowsers).add(siteCountries).add(siteContent);