gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 01:21:22 28 4
gpt4 key购买 nike

我正在为我的 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 Error 对象。这似乎有点矫枉过正(最终可能甚至没有帮助,因为用户不会关心 javascript 堆栈跟踪等)。
  2. 返回包含错误信息的字符串或对象。然后,汇编程序的用户可以选择如何处理错误(如果有的话)。
  3. 更改汇编器 API 以改为使用回调:

    assembler.assemble(source, function(binary, error) {
    如果(错误){
    //处理错误
    }
    //否则,使用二进制文件
    });

  4. 完全是别的东西?

如有任何想法、想法或反馈,我们将不胜感激。

最佳答案

我认为您的三个选项都可以。现在从我的 Angular 来看:

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

我会选择选项 1 或 2。第一个有点矫枉过正,但我​​认为这是编译器所做的最现实的方法。没有零代码退出。但随后您需要添加一个 try/catch block 来处理错误。

所以下一个选项是返回一个错误对象。对我来说似乎是最好的选择。

我建议您返回一个错误对象。很简单:

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 */ }

祝你好运!

关于Javascript 抛出与返回错误对象与回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24515751/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com