最适合在JavaScript中解析的错误处理策略?

时间:2018-02-20 16:02:15

标签: javascript error-handling

JavaScript是多范式的,并为同步代码提供(至少)3种不同的错误处理策略。

我已经在async函数的上下文中看到了这个问题,明确建议使用promise,但同步函数呢?

一个例子是解析。假设我有一个将字符串解析为整数的函数。如果输入格式错误,此功能将失败,但我应该如何对此进行建模?

1。试试风格

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);
}

1 个答案:

答案 0 :(得分:1)

避免(滚动自己的)回调样式,这使得它变得不必要复杂(你还需要array[label1,label2,label3,...])。

同步异常是首选解决方案。它们很常见,易于理解,并且语法简单。

如果您喜欢函数式编程,还可以使用适当的数据结构来表示类型签名中可能存在的错误。但是,您不会只返回一个对象文字,您将使用一个实现if数据类型的库以及所有适当的方法。 There are quite a few ...