[問題] 有沒有辦法強制停止正在執行中的JavaScri

作者: red0whale (red whale)   2016-05-22 15:00:30
<script>
var fn = function(url){
// bla bla bla...
};
</script>
<input type="button" onclick="fn()" value="Execute">
<input type="button" onclick="???" value="Abort">
如上,當使用者按下“Execute”按鈕時,“fn()”函數就會被執行。
假設fn()函數會執行很久,
如果使用者想在中途停止這個函數的執行(按“Abort”按鈕),
請問我該怎麼做?
如果說“fn()”函數有哪些的話,就像AJAX或其他可能要跑很久的程式
當然,除了AJAX之外還有可能是其他哩哩摳摳的函數。
不管,反正就是要強制讓該函數停止的方法為何?
作者: Kenqr (function(){})()   2016-05-22 16:05:00
先檢查某個變數為true時,再setTimeout按abort鈕時就去改變那個變數的內容
作者: mrbigmouth (大嘴先生)   2016-05-22 16:17:00
一定要使用timeout系列函數 否則fn執行中使用者是完全不可能做到任何事的 包括捲卷軸或點擊按鈕都不行畫面會整個當掉 因為JavaScript是單執行緒的執行環境使用者永遠只可能在fn執行一段落後才可能動作
作者: eight0 (欸XD)   2016-05-22 22:52:00
fn() 並沒有執行很久,而是執行「很多次」Abort 並不是在 fn() 執行中被按下的,而是在兩次 fn() 之間被按下的fn() 和 setTimeout(fn) 的效果是不一樣的
作者: shadowjohn (轉角遇到愛)   2016-05-22 23:28:00
用 flag吧~true時可跑,false return掉
作者: mrbigmouth (大嘴先生)   2016-05-23 07:16:00
eight0說的沒錯 還有像ajax在發送出去到回來之間function也是沒在執行的所以能中間中斷的function 只可能是setTime系列那種本身自己就不斷中斷不斷執行的function 方法其他人說很多了 但你原本問的那種直接中斷function是不允許的
作者: mirtac (mirtac)   2016-05-23 14:04:00
基本上是做不到的, 除非使用worker, 但要注意 worker中不能存取 dom , 還有較舊的browser不支援worker
作者: mrbigmouth (大嘴先生)   2016-05-23 16:30:00
自己用變數紀錄現在在哪個步驟囉

Links booklink

Contact Us: admin [ a t ] ucptt.com