2016-07-06 85 views
1

我有一個網絡工作者,但我希望它提前終止,並在新的請求進來時被替換,調用.terminate()似乎完全殺死它,我只是希望它停止任何處理以前的請求。取消Web工作人員

下面是一些示例代碼,我只希望最近的滑塊值任何未完成的人應該有更好的表現被取消 -

的index.html

<input type="range" id="inputRange"/> 
<div id="result"></div> 
<script> 
var worker = new Worker("worker.js") 
document.getElementById("inputRange").oninput = function(e) { 
    worker.postMessage(e.target.value); 
} 
worker.onmessage = function(e) { 
    document.getElementById("result").textContent=e.data; 
} 
</script> 

worker.js

onmessage = function (args) { 
    var total=0; 
    for (var i=0;i<1000000;i++) 
     total+=args.data*Math.random() 
    postMessage(args.data+"="+Math.floor(total)); 
} 

http://plnkr.co/edit/Glam0SsPonmngep8YWPq?p=preview

+0

你的意思是什麼*最近的滑塊值*? – RomanPerekhrest

+0

如果你拖動滑塊很多值被觸發,我只對最後一個感興趣(我意識到我可以改變滑塊事件,但這是一個任意的例子來理解網絡工作者。) – Daaavvy

+0

和爲什麼你沒有設置你的'範圍'參數像'min =「0」max =「180」step =「20」'? – RomanPerekhrest

回答

0

在您的網絡工作者中,您可以在Promise.race()方法的幫助下包含回調競爭條件。

  • 1st Promise實現了正常的行爲,並且會在進程終止時解決。
  • 當網絡工作者得到一條新消息時,第二個承諾就會實現。

只要承諾一結算,Promise.race()就會自行解決。