Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
循环中承诺的javascript睡眠函数_Javascript_Loops_Sleep - Fatal编程技术网

循环中承诺的javascript睡眠函数

循环中承诺的javascript睡眠函数,javascript,loops,sleep,Javascript,Loops,Sleep,我打算在firefox中打开一系列URL,每一个URL都应该在10分钟内一个接一个地打开,下面是我应该在firebug控制台中执行的代码: function sleep (time) { return new Promise((resolve) => setTimeout(resolve, time)); } var urls = ["https://www.google.com/","https://www.bing.com/","https://www.reddit.com/"

我打算在firefox中打开一系列URL,每一个URL都应该在10分钟内一个接一个地打开,下面是我应该在firebug控制台中执行的代码:

function sleep (time) {
    return new Promise((resolve) => setTimeout(resolve, time));
}
var urls = ["https://www.google.com/","https://www.bing.com/","https://www.reddit.com/"];
for(var i = 0; i < urls.length; i++)
    sleep(600000 * i).then(() => {
    window.open(urls[i]); 
})
功能睡眠(时间){
返回新承诺((resolve)=>setTimeout(resolve,time));
}
变量URL=[”https://www.google.com/","https://www.bing.com/","https://www.reddit.com/"];
对于(var i=0;i{
window.open(url[i]);
})

但是没用,有人能帮我吗?谢谢~

Sleep
函数正在异步执行
for
循环在执行任何
Sleep
调用之前完成

因此,循环的
的最后一个值将是
3
,并且
窗口。open
函数将接收未定义的
URL[3]
值作为参数

看看:

功能睡眠(时间){
返回新承诺((resolve)=>setTimeout(resolve,time));
}
变量URL=[”https://www.google.com/","https://www.bing.com/","https://www.reddit.com/"];
对于(var i=0;i{
控制台日志(i);

})
Sleep
函数正在异步执行
for
循环在执行任何
Sleep
调用之前完成

因此,
循环的
的最后一个值将是
3
,并且
窗口。open
函数将接收未定义的
URL[3]
值作为参数

看看:

功能睡眠(时间){
返回新承诺((resolve)=>setTimeout(resolve,time));
}
变量URL=[”https://www.google.com/","https://www.bing.com/","https://www.reddit.com/"];
对于(var i=0;i{
控制台日志(i);

})
您可以使用()或()代替睡眠来实现此目的。

您可以使用()或()代替睡眠来实现此目的。

问题是,在所有3种情况下,i将=3打开,因此您需要保存i,例如

function sleep (time, i) {
    return new Promise((resolve) => setTimeout(() => resolve(i), time));
}
var urls = ["https://www.google.com/","https://www.bing.com/","https://www.reddit.com/"];
for(var i = 0; i < urls.length; i++)
    sleep(1 * i, i).then((index) => {
    console.log(urls[index]); 
})
功能睡眠(时间,i){
返回新承诺((resolve)=>setTimeout(()=>resolve(i),time));
}
变量URL=[”https://www.google.com/","https://www.bing.com/","https://www.reddit.com/"];
对于(var i=0;i{
log(URL[index]);
})

但即使这样也无济于事,因为第一个新选项卡将打开,浏览器将停止非活动选项卡中的代码。

问题是,在所有3种情况下,i将=3打开,因此您需要保存i,例如

function sleep (time, i) {
    return new Promise((resolve) => setTimeout(() => resolve(i), time));
}
var urls = ["https://www.google.com/","https://www.bing.com/","https://www.reddit.com/"];
for(var i = 0; i < urls.length; i++)
    sleep(1 * i, i).then((index) => {
    console.log(urls[index]); 
})
功能睡眠(时间,i){
返回新承诺((resolve)=>setTimeout(()=>resolve(i),time));
}
变量URL=[”https://www.google.com/","https://www.bing.com/","https://www.reddit.com/"];
对于(var i=0;i{
log(URL[index]);
})
但即使这样也无济于事,因为第一个新选项卡将打开,浏览器将停止非活动选项卡中的代码。

您认为interval+更适合这种情况,下面是es6的一个示例

const URL=[
'https://www.google.com/',
'https://www.bing.com/',
'https://www.reddit.com'
]
const entries=url.entries()
常量循环=设置间隔(()=>{
const{value,done}=entries.next()
完成?清除间隔(循环):打开(值)
}, 600 * 10)
认为interval+更适合这种情况,下面是一个es6示例

const URL=[
'https://www.google.com/',
'https://www.bing.com/',
'https://www.reddit.com'
]
const entries=url.entries()
常量循环=设置间隔(()=>{
const{value,done}=entries.next()
完成?清除间隔(循环):打开(值)
}, 600 * 10)

承诺与异步/等待函数配合使用非常好

下面将声明一个新的异步函数(即,调用函数后它将在外部执行)。异步函数的代码非常容易读取,因为它的读取方式类似于同步函数:

功能睡眠(时间){
返回新承诺((解析)=>setTimeout(解析,时间))
}
(异步函数(){
常量URL=[”https://www.google.com/","https://www.bing.com/","https://www.reddit.com/"]
for(让url的url){
等待睡眠(1000)
console.log(url)
}
})()

承诺与异步/等待函数配合使用非常好

下面将声明一个新的异步函数(即,调用函数后它将在外部执行)。异步函数的代码非常容易读取,因为它的读取方式类似于同步函数:

功能睡眠(时间){
返回新承诺((解析)=>setTimeout(解析,时间))
}
(异步函数(){
常量URL=[”https://www.google.com/","https://www.bing.com/","https://www.reddit.com/"]
for(让url的url){
等待睡眠(1000)
console.log(url)
}
})()

See:See:谢谢,Alex,它很管用。我发现javascript更难。谢谢王大哥,不客气。别忘了接受答案以帮助他人。谢谢Alex,这很有效。我发现javascript更难。谢谢王大哥,不客气。不要忘记接受答案以帮助他人。