假設我有setInterval(PostToServer, 1000);
。 PostToServer
函數會生成ajax文章,這可能需要一秒以上的時間。那麼接下來會發生什麼:在第一次沒有結束或者在結束新的呼叫之前等待第二個呼叫?javascript setInterval:做調用重疊?
回答
通話重疊。
setInterval
確保函數定期運行,無需等待以前的結果。
如果要等待響應,請將間隔方法更改爲輪詢器。當時間已過並且服務器已經響應時,再次請求。
由於服務器響應在響應後不會發生太多變化,因此您還可以在AJAX方法的回調函數中添加setTimeout
處理程序。
Javascript是單線程的(除了未涉及此問題的HTML5網絡工作者)和事件隊列。在上一次呼叫完成之前,從setInterval()
開始的後續呼叫將永遠不會啓動。一次只能有一個人活躍起來。
當您的時間間隔發生時,JS引擎內部會觸發定時器,並將事件添加到javascript事件隊列中。噹噹前正在運行的JS執行完畢(而不是之前)時,JS引擎會從事件隊列中取出下一個事件並啓動該JS執行的線程。因此,JS中的兩個執行路徑將永遠不會重疊或同時進行。所以,來自setInterval()的兩個函數調用永遠不會重疊。第二個在第一個執行完成之前不會啓動。
但是,相對於你的問題,這意味着從setInterval()
的兩個區間永遠不會重疊,但是如果你在第一個間隔定時器上進行異步ajax調用,並且ajax調用的開始馬上結束,第二個時間間隔在第一個異步ajax調用觸發它的完成函數之前觸發,那麼您的ajax調用將會或可能重疊。
如果你想防止一次有多個ajax調用在進行,你必須編寫一些代碼來專門防止這種情況發生,直到前一個ajax調用完成或者只是跳過任何Ajax調用,如果前一個仍在繼續。
請參閱this post瞭解關於JS事件隊列的更多信息以及它如何工作。
是的,它重疊。您可以在PostToServer函數中使用setTimeout
以確保它不重疊,但問題是它運行請求,然後等待1秒,然後再次運行請求。所以它不會精確地運行。
欲瞭解更多信息,請參閱該視頻保羅愛爾蘭:http://youtu.be/i_qE1iAmjFg?t=7m46s
- 1. JavaScript setInterval調用form.submit
- 2. 防止setInterval的重疊
- 3. JavaScript類 - this.method調用的setInterval
- 4. 使用setInterval調用Javascript綁定
- 5. Javascript - 將setInterval重置爲0
- 6. 在javascript中重置setInterval
- 7. javascript setInterval - 如何調用多次並保持setInterval ID?
- 8. 從對象內部調用setInterval Javascript?
- 9. SetInterval沒有調用該函數 - javascript
- 10. 的setInterval JavaScript的 - 如何調用函數
- 11. JavaScript setInterval - 函數只調用一次
- 12. 用setInterval()調用EventListener()
- 13. javascript setInterval
- 14. 使用Javascript - 的setInterval()
- 15. 使用setInterval和JavaScript
- 16. 如何使用Boost.MPI做重疊分散?
- 17. 重疊矩形Javascript
- 18. 在調用的setInterval
- 19. Ajax調用和setInterval
- 20. SetInterval函數調用
- 21. SetInterval with javascript in javascript
- 22. 重新啓動的setInterval在JavaScript
- 23. Ajax調用的重疊問題:成功
- 24. setInterval- Javascript not working
- 25. javascript-setTimeout()vs setInterval()
- 26. javascript setInterval()滑塊
- 27. JavaScript setInterval和setTimeout
- 28. JavaScript setInterval問題
- 29. javascript setInterval()加載
- 30. Javascript setInterval question
@ jfriend00這個答案是正確的。 OP詢問'setInterval'中的函數是否等待來自前一個'setInterval'方法的AJAX請求的結束,而不是前一個'setInterval'調用中函數的結尾**。 – 2012-02-09 22:19:42
我最初誤讀了這個問題,並收回了我的評論,並且倒下了。我最初以爲他們問是否兩個setInterval回調調用可能重疊(他們不能)。我沒有看到他們在談論關於間隔觸發的ajax調用。 – jfriend00 2012-02-09 22:25:28