2 回答
TA贡献1836条经验 获得超3个赞
您的解决方案很棒,唯一的问题是除非setInterval您取消呼叫,否则呼叫将永远无法完成。
这个解决方案的问题是它涉及一些副作用,以后调试起来会很乏味。
我可以提出一个涉及较少副作用并利用一些新概念(例如 Promises 和 Async/Await 上下文)的解决方案。
"use strict";
function sleep(seconds) {
return new Promise(function(resolve) {
window.setTimeout(resolve, seconds * 1000);
});
}
async function openAndCloseAfter(seconds, url) {
const openWindow = window.open(url, "_blank");
await sleep(seconds);
openWindow.close();
}
async function openAll(urls) {
for (const url of urls) {
await openAndCloseAfter(10, url);
}
}
openAll([
"https://stackoverflow.com",
"https://stackexchange.com"
]);
我会让您注意进行必要的运行时类型检查,以防止使用错误的参数类型调用这些函数。
TA贡献1829条经验 获得超13个赞
尝试这个
var myWindow;
let urls = ["https://stackoverflow.com", "https://stackexchange.com/"];
let counter = 0;
let openWindow;
function openWin(url) {
openWindow = window.open(url, "_blank");
}
function closeWin(){
openWindow.close();
}
setInterval(function(){
if(openWindow) closeWin();
if((counter) == urls.length) return
openWin(urls[counter]);
counter++;
}, 1000)
添加回答
举报