Re: [問題] 如何在迴圈中延遲?

看板Ajax作者 ( _(:3」∠)_)時間6年前 (2018/07/05 23:55), 6年前編輯推噓2(202)
留言4則, 2人參與, 6年前最新討論串3/3 (看更多)
把你的函式改成一個遞迴函式呢? 像是 function someRecursive(cnt) { /* do something */ if (cnt < 999) { setTimeout(someRecursive(cnt + 1), 5000) } } 之類的 ※ 引述《ggbast (GG)》之銘言: : 最近剛踏入javascript的領域 : 我想在一個迴圈中重複執行某一個function : 這個function是個同步函數 : 我希望每次都做完這個function才延遲 : 大概像是下面這樣 : while (cnt<999) { : function() : delay() : cnt++ : } : 我試過了setTimeout 結果跟預期的不同 : 用了promise跟then的作法也是不如預期 : 請問各位大神有什麼方法可以做到我要的效果呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 110.50.145.214 ※ 文章網址: https://www.ptt.cc/bbs/Ajax/M.1530806131.A.DE8.html

07/06 09:55, 6年前 , 1F
感謝大大幫忙 :D
07/06 09:55, 1F

07/06 22:28, 6年前 , 2F
這方法好像沒辦法確實的在每一次執行之間加入延遲,實際上
07/06 22:28, 2F

07/06 22:28, 6年前 , 3F
會全部同時做並在延遲後一次將所有結果輸出
07/06 22:28, 3F
上面原文我沒有寫可以正確執行的程式 直接複製貼上會不能用 setTimeout() 的第一個參數 這個函式要用引號 " 括起來 如下 function someRecursive(cnt) { /* do something */ if (cnt < 999) { setTimeout("someRecursive("+(cnt + 1)+")", 5000) } } 這樣應該就可以了 ※ 編輯: itisjoe (110.50.145.214), 07/07/2018 00:44:41

07/07 01:51, 6年前 , 4F
建議寫成 setTimeout(someRecursive, 5000, cnt + 1)
07/07 01:51, 4F
文章代碼(AID): #1RFZzpte (Ajax)
文章代碼(AID): #1RFZzpte (Ajax)