我正在为我的CS学生在课堂上使用的玩具汇编语言编写汇编程序和模拟器。我在javascript中编写它的想法是,我可以在浏览器中构建一个简单的UI,向学生展示每条指令如何改变机器的状态等。
我正在努力解决的一个问题是在传递无效汇编代码时从汇编程序返回错误信息的最佳方法。汇编程序目前有一个非常简单的API:
var assembler = ... // Get the assembler object
var valid_source = "0 mov r1 r2\n1 halt";
var valid_binary = assembler.assemble(valid_source); // String containing 0's and 1's
var invalid_source = "foo bar baz!";
var invalid_binary = assembler.assemble(invalid_source); // What should happen here?
我对如何运作有一些想法:
将汇编程序API更改为使用回调:
assembler.assemble(source, function(binary, error) {
if (error) {
// Handle the error
}
// Otherwise, do stuff with the binary
});
非常感谢任何想法,想法或反馈。
答案 0 :(得分:-1)
我认为你的三个选择都可以。现在从我的角度来看:
我会远离第三个选项,因为它会让人觉得它不是异步函数。
我会选择选项1或2.第一个是有点矫枉过正,但我认为这是编译器所做的最现实的方法。退出没有零代码。但是,您需要添加一个try / catch块来处理错误。
所以下一个选项是返回一个错误对象。对我来说似乎是最好的选择。
我建议你返回一个Error对象。它很简单:
return new Error('Parsing error');
// Or with an error name
var error = new Error('Parsing error');
error.name = 'PARSING_ERROR';
return error;
使用错误对象的一个好处是它可以为您提供堆栈跟踪和其他方便的东西。更多信息here。
另外,要检查是否有任何错误,只需要检查变量类型:
if (typeof valid_binary === 'string') { /* no error */ }
// Or
if (typeof valid_binary === 'object') { /* error */ }
祝你好运!