我目前正在开发一个计算器,它将作为打包的(桌面)chrome 应用程序运行。我正在使用math.js库来解析数学输入。这是我的旧代码:
评估.js:
var parser = math.parser();
function evaluate(input){
$("#output").text(parser.eval(input));
}
但是,如果输入是不合理的,例如6234523412368492857483928!
,应用程序就会冻结,因为它正在尝试评估输入。我知道它math.js
仍处于测试阶段,所以最终可能会有一个修复(溢出错误),但我找不到任何其他像这样解析原始输入的库math.js
。
为了解决这个问题,我正在尝试使用网络工作者来异步运行它来解决这个问题。这是我现在拥有的代码:
main.js
var evaluator = new Worker('evaluate.js');
evaluator.addEventListener('message', function(e){
$("#output").text(e.data);
}, false);
function evaluate(input){
evaluator.postMessage(input);
}
评估.js
var parser = math.parser();
function mathEval(input){
return parser.eval(input);
}
self.addEventListener('message', function(e){
self.postMessage(mathEval(e.data));
});
但是,当我运行它时,这不起作用。另外,我注意到当我使用网络工作者时,它会抛出错误Uncaught ReferenceError: math is not defined - evaluate.js:1
,但它没有用旧代码抛出这个错误。
问题:为什么这段代码不能评估输入?是否可以使用多个工人来加快速度?如果我想在工作人员花费超过 2 秒时实现某种溢出错误,那么最好的方法是什么?最后,有没有更好的方法来做到这一点?