繁体   English   中英

Javascript抛出与返回错误对象与回调

[英]Javascript throw vs. return error object vs. callback

我正在为我的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?

我对这可能如何工作有一些想法:

  1. 构造并抛出一个新的javascript错误对象。 这看起来有点矫枉过正(最终可能甚至没有帮助,因为用户不关心javascript stacktrace等)。
  2. 返回包含错误信息的字符串或对象。 然后汇编程序的用户可以选择如何处理错误(如果有的话)。
  3. 更改汇编程序API以使用回调:

    assembler.assemble(source, function(binary, error) { if (error) { // Handle the error } // Otherwise, do stuff with the binary });

  4. 还有别的吗?

任何想法,想法或反馈都将非常感激。

我认为你的三个选择都可以。 现在从我的角度来看:

我会远离第三个选项,因为它给人的感觉是它不是异步函数。

我会选择选项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;

使用错误对象的一个​​好处是它可以为您提供堆栈跟踪和其他方便的东西。 更多信息在这里

另外,要检查是否有任何错误只需要检查变量类型:

if (typeof valid_binary === 'string') { /* no error */ }

// Or

if (typeof valid_binary === 'object') { /* error */ }

祝好运!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM