这太硬了吗?

时间:2018-09-25 20:41:46

标签: javascript reactjs error-handling

我正在尝试处理ReactJs中的错误,但是我认为我做的“太硬了”。 错误处理检查输入是否为数字,否则引发错误。我想向用户显示一条消息,并告诉他们他们做错了什么。

按照标准,当用户输入数字以外的其他内容时引发的错误是:

  

在将数字转换为字符串时,无效的数字值'd'应该是与数字匹配的(^-?[0-9。] +)。

为了给他们提供更多信息,我做了以下事情:

try {
      /// some code here
    } catch (err) {
      /* this.state.value refers to user's input*/
      if(err.message === ("while converting number to string, invalid number value '"+ this.state.value +"', should be a number matching (^-?[0-9.]+)."))
      {
        /// code which returns an informative message
      }
  };

if语句是否适合错误处理或可以改进?很明显,我将针对项目的不同方面运行错误处理并检查不同的情况,但是我发现自己一遍又一遍地重复相同的事情。

1 个答案:

答案 0 :(得分:1)

我当时正在写评论以跟进,最终耗尽了空间。

这实际上取决于您要如何构造项目,而且还是很主观的。

对于所采用的方法,我不太满意的是,您直接检查了要发送给用户的消息以进行处理,而该消息可能并不总是相同的。

我更喜欢这样处理它:

try {
  /// some code here
  if (something) {
    throw { name: 'INVALID_NUMBER_VALUE', message: "while converting number to string, invalid number value '"+ this.state.value +"', should be a number matching (^-?[0-9.]+)." }
  }
} catch (err) {
  /* this.state.value refers to user's input*/
  if (err.name === 'INVALID_NUMBER_VALUE') {
    /// do something with your message
  }
};

现在您可以进一步对此进行抽象。假设您在项目中有预定义的错误类型,可以在另一个文件中为错误创建对象映射,然后将其导入:

export const errorNames = {
    invalidNumberValue: 'INVALID_NUMBER_VALUE',
    invalidName: 'INVALID_NAME',
    // so on and so forth
}

在原始文件中:

import { errorNames } from './errorNames'

try {
  /// some code here
  if (something) {
    throw { name: errorNames.invalidNumberValue, message: "while converting number to string, invalid number value '"+ this.state.value +"', should be a number matching (^-?[0-9.]+)." }
  }
} catch (err) {
  /* this.state.value refers to user's input*/
  if (err.name === errorNames.invalidNumberValue) {
    /// do something with your message
  }
};

其中很多还是取决于偏好,但我希望保持错误处理的井井有条。