[英]loop between links . is opening simultaneous multiple pages and doesn't stop
我知道這是一個愚蠢的問題,但我無法弄清楚。(我正在學習,所以請客氣)
它同時打開多個頁面,並且當var page2為空時不會停止,仍然繼續打開空白頁面。
我認為空白頁面的問題是if(page.length===0) loop();
,但是如果我使用if(page.length===0) return;
完成后如何調用循環功能?
我希望在完成后將變量page2中的鏈接推入,開始在鏈接之間逐一循環
var page = [ "link1" , "link2" , "link3"];
var page2 = [];
function pushToPage2Arr() {
if(page.length===0) loop();
var url = page.shift();
var openWindow = window.open(url, "_blank","height=500","width=500");
setTimeout(function () {
var cat = openWindow.document.getElementsByClassName("list-id");
for (var i = 0; i < cat.length ; i++) {
var id = openWindow.document.getElementsByClassName("list-id")[i].children[0].children[1].textContent;
var cbn = openWindow.document.getElementsByClassName("list-cbn")[i].children[3].textContent;
page2.push("http://blabla.com?id="+id+"&cbn="+cbn);
}
openWindow.close();
pushToPage2Arr();
}, 2000);
}
pushToPage2Arr();
function loop() {
if(page2.length===0) return;
var url2 = page2.shift();
var openWindow2 = window.open(url2, "_blank","height=500","width=500");
setTimeout(function () {
//do someting
openWindow2.close();
loop();
}, 3000);
}
因此,您要用盡page1,在此過程中填充page2,然后要用盡page2。
您可以更正您已經關注的錯誤-該控件從循環返回到pushToPage2Arr:
if(page.length===0) loop();
var url = page.shift();
...
應該:
if(page.length===0) { loop(); return; }
var url = page.shift();
但是,您在這里擁有的確實是一個“延遲每個”。 那么,為什么不寫呢?
這是一個單頁腳本,該腳本將跨度設置為列表中的每個數字,然后在循環結束后將其設置為“完成”。
<!doctype html>
<p>hello: <span id=text></span></p>
<script>
;(function() {
function delayedForEach(list, fun, timeout, andthen) {
function process() {
var x = list.shift()
if (x === undefined) {
andthen()
} else {
fun(x)
setTimeout(process, timeout)
}
}
process()
}
var stuff = [1,2,3,4],
text = document.getElementById('text')
delayedForEach(stuff, function(x) { text.textContent = String(x) }, 500,
function() { text.textContent = 'done' })
})()
</script>
您還可以壓縮兩個列表及其相應的功能,並以虛擬對象和相應的終結器結尾:
function delayedDo(list, delay) {
function process() {
var x = list.shift()
if (x !== undefined) {
x[1](x[0])
setTimeout(process, delay)
}
}
process()
}
var text = document.getElementById('text'),
num = function(x) { text.textContent = '(number: ' + x + ')' },
str = function(x) { text.textContent = '(string: ' + x + ')' },
done = function() { text.textContent = 'done!' }
joblist =
[ [ 1, num ],
[ 2, num ],
[ 3, num ],
[ 'hello', str ],
[ 'world', str ],
[ null, done ] ]
delayedDo(joblist, 1000)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.