循环中承诺的javascript睡眠函数
我打算在firefox中打开一系列URL,每一个URL都应该在10分钟内一个接一个地打开,下面是我应该在firebug控制台中执行的代码:循环中承诺的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/"
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更难。谢谢王大哥,不客气。不要忘记接受答案以帮助他人。