所以我正在使用一个名为ng-webworker的库,并尝试运行一个非常简单的长时间运行任务。
$scope.onParallelDownload = function() {
function doubler(num) {
return num * 2;
}
var myWorker = webWorker.create(doubler);
myWorker.run(3).then(function(result) {
alert("Answer: " + result);
}, function(error) {
var err = error;
});
}
这在Chrome中完美运行并显示警报,但是当我在Internet Explorer 11中运行时,我正在调试它,错误函数被命中,这仍然很有希望,但是,错误有效负载中没有给出数据,有问题,因为我完全不知道是什么导致Web工作者在该特定浏览器上失败。
答案 0 :(得分:1)
您很可能没有设置文件worker_wrapper.min.js
(或worker_wrapper.js
)的路径。 IE需要此文件(见下文)。将您的应用配置调整为以下内容:
angular.module('myApp', [
// your dependencies
'ngWebworker'
])
.config(['WebworkerProvider', function (WebworkerProvider) {
WebworkerProvider.setHelperPath("./bower_components/ng-webworker/src/worker_wrapper.min.js"); // adjust path
}]);
此代码假定您已安装ngWebworker与bower。您可能仍需要调整路径,具体取决于您所在的路径。
如果您已经设置了辅助路径,但它仍然无效,请检查开发人员工具中是否正在加载帮助文件(您可能设置了错误的路径并获得了404)。
将函数传递给Webworker时,它会将此函数转换为blob,然后由web worker执行,就像它是一个独立的文件一样。但是,Internet Explorer将这些blob视为跨域,因此这不起作用。 ngWebworker使用的解决方法是运行独立的JavaScript文件(我们在上面设置的worker_wrapper.min.js
)。然后,Web worker运行该文件,ngWebworker将您的字符串化函数传递给评估它的worker。
请注意,如果您不在IE上,则不会使用此文件。