javascript - 取消 Web Worker

标签 javascript

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

这是一些示例代码,我只想要最新的 slider 值,任何未完成的 slider 值都应该被取消以获得更好的性能 -

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

最佳答案

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

  • 第一个 Promise 实现正常行为,并将在进程终止时得到解决。
  • 当 Web Worker 收到新消息时,第二个 Promise 就实现了。

一旦 Promise 得到解决,Promise.race() 就会自行解决。

关于javascript - 取消 Web Worker,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38217778/

相关文章:

javascript - knockout 内部/外部模块!==短暂/单一的生活方式?

javascript - 在 jQuery 中处理连续的按钮点击

javascript - 如何在JavaScript中访问名称中包含 "-"字符的JSON元素

javascript - Sortable.js 无法工作 : List items are not draggable

javascript - 无法加载/无效声音零长度持续时间报告 chrome、firefox

javascript - 无法禁用多选下拉菜单

javascript - Angular then 不会触发递归函数上的 Promise

javascript - jQuery 从列表结构构建面包屑导航链接

javascript - 在 JQuery 中切换可见性

javascript - AJAX 调用在 ASP.NET MV3 项目中返回内部服务器错误