我把我的應用程式托管在Heroku,我想在某個條件下停止setInterval函式。它在我的本地電腦上運行良好,但在Heroku中卻不能。在Heroku中,我的 "updateLine() "函式在滿足條件newEndX >=800和呼叫clearInterval(intervalID)后仍然被呼叫三次;
為什么 "updateLine() "仍然被呼叫,而且是三次?Heroku的作業方式是否與我們的本地計算機不同?
intervalID = setInterval(function () {
如果(newEndX < 800) {
updateLine();。
}
如果(newEndX >= 800) {
clearInterval(intervalID);
alert("你到達了畫布的終點。請點擊'重置'按鈕重新開始。")
console.log("到達畫布的終點。")
console.log("最后的startX是", newStartX);
console.log("The final endX is", newEndX);
}
}, 200);
更新:這個問題可能是由于Heroku或我的瀏覽器的一些未知問題造成的。這段代碼在我同學的電腦和他的Heroku頁面上運行正常。
uj5u.com熱心網友回復:
不知道是什么原因導致本地機器和Heroku之間的差異,但也許setTimeout函式更適合這個用例,可以解決這個問題。
setTimeout在一個延遲后呼叫一個函式。但該函式可以對條件進行檢查,并設定setTimeout,以便在條件通過時再次呼叫自己,或者在失敗時直接退出。
setTimeout呼叫可以代替setInterval呼叫,在你的例子中是這樣:
function periodicFunction() {
//做一些事情。
//應再次呼叫?-> setTimeout
if (newEndX < 800) {
updateLine()。
setTimeout(periodicalFunction, 200)。
//否則只需完成作業而不呼叫setTimeout。
} else {
alert("你已經到達畫布的末端。請點擊'重置'按鈕重新開始。")
console.log("到達畫布的終點。")
console.log("The final startX is", newStartX)。
console.log("The final endX is"/span>, newEndX)。
}
}
//初始呼叫。
setTimeout(periodicalFunction, 200)。
uj5u.com熱心網友回復:
setInterval是一個javascript函式,它為請求形成佇列。即使發生錯誤,它也不會停止,直到它得到clearInterval。這是由于瀏覽器的內部計時器和setInterval在佇列中的請求延遲造成的。
如果延遲增加,那么setInterval將不會停止,并反復呼叫這個函式。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/319741.html
標籤:
上一篇:ADAMoracle預言機支持多鏈運行獎勵ADAM生態發展
下一篇:獲取python3:無法打開檔案'daphne'。[Errno2]Heroku中沒有這樣的檔案或目錄(requirements.txt中包含daphne)。
