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)
添加回答
舉報