Javascript 用于在Chrome打包计算器应用程序中解析原始输入的Web Workers
我目前正在开发一个计算器,它将作为一个打包的(桌面)chrome应用程序运行。我正在使用库解析数学输入。这是我的旧代码: evaluate.js: 但是,如果输入是不合理的,比如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异步运行它来解决这个问题。以下是我现在掌握的代码
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));
});