我正在使用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'
有没有人知道如何在调用每个函数之前添加延迟?
提前致谢
答案 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);