取消Web工作者

时间:2016-07-06 06:48:06

标签: javascript

我有一个网络工作者,但我希望它提前终止并在新请求进入时被替换,调用.terminate()似乎完全杀死它,我只是希望它停止对先前请求的任何处理

这是一些示例代码,我只希望最新的滑块值取消任何未完成的滑块值以获得更好的性能 -

的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

1 个答案:

答案 0 :(得分:0)

在您的网络工作者中,您可以在Promise.race()方法的帮助下包含回调竞争条件。

  • 第一个Promise实现正常行为,并在流程终止时解决。
  • 当Web Worker收到新消息时,第二个Promise就会完成。

一旦承诺结算,Promise.race()将自行解决。