2016-07-06 78 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()就会自行解决。