【问题标题】:Is this too hardcoded?这是不是太硬编码了?
【发布时间】:2018-09-25 20:41:45
【问题描述】:

我正在尝试处理 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 语句是否适用于错误处理或是否可以改进?我显然会为项目的不同方面运行错误处理并检查不同的情况,但是我发现自己一遍又一遍地重复同样的事情。

【问题讨论】:

  • 相当多,是的。为什么不传递另一个名为 name 的错误属性并检查它?
  • 有时我会在抛出之前为错误添加一个键。例如你可以做throw { invalidNumber: true } 然后检查err.invalidNumber
  • @Bernardo Siqueira 你的意思是创建一个包含所有错误的字符串数组然后检查它吗?

标签: javascript reactjs error-handling


【解决方案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
  }
};

这仍然很大程度上取决于偏好,但我喜欢保持错误处理井井有条。

【讨论】:

  • 谢谢贝尔纳多!我同意你保持错误处理井井有条的观点。我正在考虑你的方法
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-08-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-01
相关资源
最近更新 更多