Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/google-chrome/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 用于在Chrome打包计算器应用程序中解析原始输入的Web Workers_Javascript_Google Chrome_Calculator_Web Worker_Google Chrome App - Fatal编程技术网

Javascript 用于在Chrome打包计算器应用程序中解析原始输入的Web Workers

Javascript 用于在Chrome打包计算器应用程序中解析原始输入的Web Workers,javascript,google-chrome,calculator,web-worker,google-chrome-app,Javascript,Google Chrome,Calculator,Web Worker,Google Chrome App,我目前正在开发一个计算器,它将作为一个打包的(桌面)chrome应用程序运行。我正在使用库解析数学输入。这是我的旧代码: evaluate.js: 但是,如果输入是不合理的,比如62345234123668492857483928,应用程序只是冻结,因为它正在尝试评估输入。我知道math.js仍处于测试阶段,因此最终可能会有修复(溢出错误),但我找不到任何其他库可以像math.js那样解析原始输入 为了解决这个问题,我尝试使用web workers异步运行它来解决这个问题。以下是我现在掌握的代码

我目前正在开发一个计算器,它将作为一个打包的(桌面)chrome应用程序运行。我正在使用库解析数学输入。这是我的旧代码:

evaluate.js:

但是,如果输入是不合理的,比如
62345234123668492857483928,应用程序只是冻结,因为它正在尝试评估输入。我知道
math.js
仍处于测试阶段,因此最终可能会有修复(溢出错误),但我找不到任何其他库可以像
math.js
那样解析原始输入

为了解决这个问题,我尝试使用web workers异步运行它来解决这个问题。以下是我现在掌握的代码:

main.js

evaluate.js

但是,当我运行它时,它不起作用。另外,我注意到当我使用WebWorkers时,它抛出错误
uncaughtReferenceError:math未定义-evaluate.js:1
,但它没有在旧代码中抛出此错误


问题:为什么此代码不能用于评估输入?是否可以使用多个工人来加快速度?如果我想在worker花费的时间超过2秒时实现某种溢出错误,那么最好的方法是什么?最后,还有更好的方法吗?

Web工作人员在完全不同的上下文中运行。他们没有从父网页访问对象的权限。如果要使用math.js,必须使用importScript将其导入worker


我建议阅读指南“导入脚本和库”部分,该部分详细介绍了如何操作以及如何工作。

我如何将Chrome API功能(如Chrome.storage)也导入到worker?您不能=)
var parser = math.parser();  
function evaluate(input){  
    $("#output").text(parser.eval(input));  
}
var evaluator = new Worker('evaluate.js');
evaluator.addEventListener('message', function(e){
    $("#output").text(e.data);
}, false);
function evaluate(input){
    evaluator.postMessage(input);
}
var parser = math.parser();
function mathEval(input){
    return parser.eval(input);
}
self.addEventListener('message', function(e){
    self.postMessage(mathEval(e.data));
});