如果创建一个Web worker失败,是否可以捕获?

时间:2012-09-11 10:21:14

标签: html5 error-handling web-worker

在下面的示例中,Web worker的代码中存在错误(未定义的引用),但是 try {...} catch(e){...} 没有太多关注。控制台上出现为什么我在这里?的消息。

HTML文件:

<html>
<body>
<script type="text/javascript">

var worker;
try {
  worker = new Worker("foo.js");
  console.log('Why am I here ?');
} catch (e) {
  console.log('Error creating the worker.');
}
// No matter what, an object "worker" will created during the call to Worker()
// How to test that all went well
var worker_failed = false;
worker.addEventListener("error",
                        function(e) { worker_failed = true },
                        false);
// Is it correct to assume that "worker" is created asynchronously, and that checking
// that creation went well should not be sequential and the test below is not
// the way to do it ?
if ( worker_failed ) {
  // Worker("foo.js") failed, switch to plan B
}
</script>
</body>
</html>

Web worker( foo.js ):

foobar = 2 + baz; // fails here (baz is undefined)
onmessage = function(e) {
  var data = e.data;
  postMessage(data);
};

1 个答案:

答案 0 :(得分:1)

您可以异步处理工作人员中的错误。您需要收听工作人员的error事件。

  

worker.addEventListener(“error”,onError,false);

有关于网络工作者here的精彩教程。您可以在handling errors部分找到您要查找的内容。

您还可以查看官方html5 spec,了解有关浏览器应如何实施此功能的更多信息。