gpt4 book ai didi

javascript - 在设计 Javascript API 时,我应该引发 TypeError 还是忽略控制台消息?

转载 作者:行者123 更新时间:2023-11-28 00:48:41 24 4
gpt4 key购买 nike

我必须创建一个 Javascript API,它是具有枚举和必需参数的基于 C 的 API 的公共(public)接口(interface)。 Javascript 作为一种松散类型语言,不会提供与使用基于 C 的 API 时可能收到的相同类型的编译器警告。

我的问题是,在围绕 C API 制作 Javascript 包装器时,在 Javascript 文化中是否期望在传递无效数据时收到 TypeError,或者更期望 API 向控制台输出一条消息并忽略错误?

这是 API 的一些示例代码...

var Foo = (function() {
var foo = {

Enum: {
First: {value: 0},
Second: {value: 1},
Third: {value: 2}
},

bar: function(eenoom, aNumber) {
if (!eenoom) {
throw new TypeError("bar: You must specify the 'eenoom' parameter");
return;
}

if (!aNumber || typeof aNumber != 'number') {
throw new TypeError("bar: You must specify the 'aNumber' parameter (as a number)");
return;
}

for (var key in foo.Enum) {
if (foo.Enum.hasOwnProperty(key)) {
if (foo.Enum[key] === eenoom) {
console.log("You did it!");
return;
}
}
}
throw new TypeError("bar: You must use the Foo.Enum enumeration");
}
}

// So no one can mess with our enums
Object.freeze(foo.Enum);

return foo;
})();

Foo.bar(Foo.Enum.First, 20);
Foo.bar({value: 0}, 20); // Throws a TypeError

注意 TypeError 的使用。这是 Javascript API 的预期行为方式吗?

最佳答案

我主要做了以下几件事:

  • 在同步公共(public) API 中,我总是检查参数并抛出适当的错误。不仅是 TypeError,还包括其他适当的错误。
  • 通常我会在特殊情况下抛出错误 - 即不符合深思熟虑的执行流程。
  • 在异步 API 中,我通过错误回调/拒绝函数报告错误。

我认为 console.log(...) 并继续不是一个好主意。如果调用不满足 API 的先决条件,则 API 契约从一开始就被破坏。 (除非契约(Contract),特别是“是的,我可以处理错误的输入”,这是相当颓废的。)

在这种情况下,您之后所做的任何事情都不会正确。所以抛出一个错误并中断。

作为 API 使用者,我会很感激抛出的错误,以及良好的堆栈跟踪和有意义的错误消息 - 更重要的是控制台中的有意义的错误消息(我可能会或可能不会注意到)。

关于javascript - 在设计 Javascript API 时,我应该引发 TypeError 还是忽略控制台消息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27065344/

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