我打算在 Firefox 中打开一系列网址,每个网址应在 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]);
})
但它不起作用,有人可以帮助我吗?谢谢~
Sleep
函数正在执行异步地和for
循环在执行任何一个之前完成sleep
calls.
所以,最后的值for
循环将是3
, and window.open
函数将接收作为参数value
of urls[3]
这是未定义的。
看一看:
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(600*i).then(() => {
console.log(i);
})
一种解决方案是使用let
关键词。
你应该使用let
关键字以便使用enclosed的价值i
多变的。
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(let i = 0; i < urls.length; i++)
sleep(6000*i).then(() => {
window.open(urls[i]);
})
jsFiddle 解决方案。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)