簡體   English   中英

$ timeout內部將循環創建無限循環

[英]$timeout inside will loop creates infinite loop

我似乎無法讓超時和循環協同工作。 如果刪除循環,則可以正常運行;如果刪除超時,則可以正常運行。 如果在一起,我將得到一個無限循環,如果它在while循環內部,則似乎沒有超時函數運行過。

任何幫助,將不勝感激!

function doTask (list) {
    if (list) {
        while (list.length > 0) {  
            (function(list){
                $timeout(function() {   
                   list.splice(0, 1); 
                   console.log("timeout...") 
                }, 5000); 
            })(list); 
        }
    }
}

您應該使用遞歸循環。 另外,您應該檢查list.length因為[]是真實值。

 function doTask(list) { if (list.length) { setTimeout(function() { list.splice(0, 1); console.log("timeout...") doTask(list); }, 500); } } var list = [1,2,3,4,5] doTask(list); 

您的代碼永遠不會給您提供運行超時功能的機會。

調用doTask時,它將進入堆棧以運行。 現在,在每個循環迭代中,您都將注冊一個超時,該超時將在doTask完成時執行。 但是您永遠不會給超時機會,因此列表的長度永遠不會減少,這就是它永遠運行的原因。

希望這可以澄清您的查詢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM