JavaScript 是多范式的,并且为同步代码提供(至少)3 种不同的错误处理策略。
我在async
函数的上下文中看到过这个问题,明确建议使用 promise ,但是同步函数呢?
一个例子是解析。假设我有一个将字符串解析为整数的函数。如果输入格式错误,此函数将失败,但我应该如何对此进行建模?
<强>1。 Try-catch 风格
const f = () => {
throw new Error('Something has gone wrong. ');
};
// Usage
try {
console.log(f());
} catch (error) {
console.error(error);
}
<强>2。回调样式
const f = (callback) => {
callback(new Error('Something has gone wrong. '), null);
};
// Usage
f((error, result) => {
if (error) {
console.error(error);
} else {
console.log(result);
}
});
<强>3。 FP 风格(也见于 Go)
const f = () => {
return {
error: new Error('Something has gone wrong. '),
result: null
};
};
// Usage
const { error, result } = f();
if (error) {
console.error(error);
} else {
console.log(result);
}
最佳答案
避免(滚动您自己的)回调样式,这会使事情变得不必要的复杂(并且您仍然需要 if
)。
同步异常是首选解决方案。它们很常见、易于理解且语法简单。
如果您喜欢函数式编程,您还可以使用适当的数据结构来表示类型签名中可能出现的错误。但是,您不仅仅返回一个对象文字,您还可以使用一个通过所有适当方法实现 Either
数据类型的库。 There are quite a few ...
关于javascript - JavaScript 解析最合适的错误处理策略?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48889375/