gpt4 book ai didi

javascript - 在 JS 中创建 "delay"函数?

转载 作者:行者123 更新时间:2023-12-03 10:15:51 27 4
gpt4 key购买 nike

我一直在阅读有关 setTimeout 和其他此类计时器的内容。但我想知道是否可以创建一个自定义函数,以便您所需要做的就是这样:

//code
delay(time);
//more code

这可能吗?

更新:好的,我明白了。因此,如果这不太可能,那么您将如何在第一次之后延迟循环。我希望它在执行后立即运行,但之后的每次迭代都会延迟。

新更新:我想既然我最初的想法落空了,向您展示我拥有的代码可能会更容易。

function autoFarm (clickEvent){

var farmTargets = [
"6_300_1",
"6_300_3",
"6_300_4",
"6_300_5",
"6_300_7"];


setTimeout(function() {
$.each (farmTargets, function(index, target){
var extraData = '{"end_pos":"' + target + '","purpose":0,"upshift":1,"bring_res":{"0":0,"2":0,"1":0},"bring_ship":{"1":25,"11":0},"rate":100,"start_pos":"6_300_2"}';

var finalData = baseDataDora + extraData + "&type=1";

setTimeout(function(){
for (i = 0; i < farmTargets.length; i++){
postRequest(sendFleetURL + getSign(extraData). finalData, function(json){
});
}
}, 15000);
});//End each loop
}, 1320000);
}//End autoFarm

基本上,它应该立即执行,并在第一个数组元素上运行 for 循环 5 次,间隔 15 秒。然后 22 分钟后移至下一组并对整个阵列重复。

最佳答案

您可以使用生成器实现类似的目标。这个想法是连续传递风格(回调 hell )可以被扁平化。生成器使用 yield 关键字暂停函数,直到回调通过调用其 next 方法恢复函数:

var async = function(gen) {
var g = gen()
function next(x) {
var cur = g.next(x)
if (cur.done) {
return cur.value
}
cur.value(next)
}
next()
}

var delay = function(time) {
return function(f) {
setTimeout(f, time)
}
}

async(function* () {
console.log('before')
yield delay(1000) // waits one second
console.log('middle')
yield delay(1000) // waits one second
console.log('after')
})

在 CPS 中,它的内容如下:

console.log('before')
setTimeout(function() {
console.log('middle')
setTimeout(function() {
console.log('after')
}, 1000)
}, 1000)

现在这适用于 Chrome、Firefox 和 iojs。

关于javascript - 在 JS 中创建 "delay"函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29871971/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com