javascript - JavaScript 解析最合适的错误处理策略?

标签 javascript error-handling

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/

相关文章:

javascript - 如何在浏览器中使用 AWS SDK 模拟单个 IAM 用户

javascript - 尝试循环出nodeJS中的旧日志仍然会写入循环出的文件

javascript - 防止 JQuery 加载时出现错误 503

http - 更好的错误处理

javascript - JS : Uncaught TypeError: Property '$' of object [object Object] is not a function

javascript - 等待循环先完成

javascript - HTML5 音频标签 onplaying 甚至在 android 中的音频播放之前被触发

python - Choregraphe中的python代码错误

error-handling - Ember ApplicationRoute无法处理错误事件

ruby - 如何在服务器/客户端上使用Ruby的write_nonblock/read_nonblock?