作者itisjoe ( _(:3」∠)_)
看板Ajax
標題Re: [問題] 如何在迴圈中延遲?
時間Thu Jul 5 23:55:27 2018
把你的函式改成一個遞迴函式呢?
像是
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://webptt.com/m.aspx?n=bbs/Ajax/M.1530806131.A.DE8.html
1F:→ ggbast: 感謝大大幫忙 :D 07/06 09:55
2F:推 ggbast: 這方法好像沒辦法確實的在每一次執行之間加入延遲,實際上 07/06 22:28
3F:→ ggbast: 會全部同時做並在延遲後一次將所有結果輸出 07/06 22:28
上面原文我沒有寫可以正確執行的程式 直接複製貼上會不能用
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
4F:推 eight0: 建議寫成 setTimeout(someRecursive, 5000, cnt + 1) 07/07 01:51