0

我正在使用 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' 

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

提前致谢

4

2 回答 2

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);
于 2013-11-14T13:43:48.533 回答
0

这不像 .delay 作品,它应该只用于延迟动画,对于这种 f 延迟,您将不得不使用 setTimeout();

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

但是为什么会延迟呢?

于 2013-11-14T11:35:21.907 回答