我正在尝试处理ReactJs中的错误,但是我认为我所做的“太硬了”。
错误处理检查输入是否为数字,否则引发错误。我想向用户显示一条消息,并告诉他们他们做错了什么。
按照标准,当用户输入数字以外的其他值时引发的错误是:
为了给他们提供有用的信息,我做了以下工作:
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语句是否适合错误处理或可以改进?显然,我将针对项目的不同方面运行错误处理并检查不同的情况,但是我发现自己一遍又一遍地重复同样的事情。
最佳答案
我正在写评论以进行跟进,结果空间不足。
这实际上取决于您要如何构造项目,而且还是很主观的。
我对所采用的方法不太满意,是您直接检查了要发送给用户的消息以进行处理,而该消息可能并不总是相同的。
我更喜欢这样处理:
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
}
};
仍然有很多归结为偏好,但是我喜欢保持错误处理的有条理。