[英]Minimize if statement to maintain readability in javascript
我一直在编写一个系统来处理我通过 API 收到的回复,但是似乎我的整个get
变得非常混乱和难以管理?
处理此类语句而不是多个if
检查的正确方法是什么?
const getOrder = async (req, res) => {
let response;
console.log(req.body);
let params = await parser.parseStringPromise(req.body.parameters);
if(typeof params.PARAMETERS.ID === undefined) {
return res.send(success_response({
'STATUS': 3,
'CODE': 'Invalid Order'
}));
}
let imei = params.PARAMETERS.ID;
let solution = await client.get(imei);
if(solution === null || solution === undefined) {
response = res.send(success_response({
'STATUS': 3,
'CODE': 'Invalid Order'
}));
} else {
//check for major error first!
let check_error = await client.get('error-' + imei);
if(check_error !== null) {
await client.del('error-' + imei);
response = res.send(success_response({
'STATUS': 3,
'CODE': 'api_error'
}));
} else {
solution = JSON.parse(solution);
if (solution.orderNumber === undefined && solution.error === undefined) {
response = res.send(success_response({
'STATUS': 1
}));
}
if (solution.orderNumber !== undefined) {
const result = await orderStatus(solution.imei, solution.orderNumber, solution.token, solution.tokenRefId);
if (result.data.reason === 'EMAIL_CONFIRMATION') {
response = res.send(success_response({
'STATUS': 1
}));
} else if (result.data.unlockStatus === 'IN-PROGRESS') {
response = res.send(success_response({
'STATUS': 1
}));
} else if(result.data.unlockStatus === 'APPROVED') {
response = res.send(success_response({
'STATUS': 4,
'CODE': 'Unlocked'
}));
} else if(result.data.unlockStatus === 'DENIED') {
response = res.send(success_response({
'STATUS': 4,
'CODE': 'Denied - ' + result.data.reason
}));
} else {
response = res.send(success_response({
'STATUS': 1
}));
}
}
if (solution.error !== undefined) {
if (solution.error === 'server_error') {
response = res.send(success_response({
'STATUS': 4,
'CODE': 'server_error'
}));
} else if (solution.error === 'email_api' || solution.error === 'captcha_api') {
response = res.send(success_response({
'STATUS': 3,
'CODE': 'api_offline - ' + solution.error
}));
} else if (solution.errorCode === 'ULP_1103') {
//captcha api service provided wrong answer
response = res.send(success_response({
'STATUS': 3,
'CODE': 'Resend Order'
}));
} else {
response = res.send(success_response({
'STATUS': 4,
'CODE': solution.error
}));
}
//await client.del(imei);
}
}
}
return response;
}
我会做一些我可以调用的辅助函数。 某种帮手 class 可能。
否则我会停止将后续的 if 语句嵌套在 else 语句中,让代码自然地从上到下阅读。 所以这样
if(solution === null || solution === undefined) {
response = res.send(success_response({
'STATUS': 3,
'CODE': 'Invalid Order'
}));
return;
}
let check_error = await client.get('error-' + imei);
if (check_error) {
await client.del('error-' + imei);
response = res.send(success_response({
'STATUS': 3,
'CODE': 'Invalid Order'
}));
return;
}
.
.
.
如果你想编写一个 function 来检查变量是否有任何值,你可以创建一个看起来像这样的帮助器 function:
function isNullUndefinedOrEmpty(value) {
let res = (typeof value === undefined) ? true : false;
switch (value) {
case undefined:
res = true
break;
case null:
res = true
break;
case '':
res = true
break;
case '{}':
res = true
break;
default:
res = false
break;
}
if(!res) {
if(value.constructor === Object) {
if(Object.keys(value).length === 0) {
res = true
}
}
}
return res
}
这样你现在可以调用:
if(isNullUndefinedOrEmpty(solution)) {
// Value was evaluated as empty - handle error here and return
}
用于演示帮助程序 function 的片段
function isNullUndefinedOrEmpty(value) { let res = (typeof value === undefined)? true: false; switch (value) { case undefined: res = true break; case null: res = true break; case '': res = true break; case '{}': res = true break; default: res = false break; } if (.res) { if (value.constructor === Object) { if (Object.keys(value).length === 0) { res = true } } } return res } console.log(isNullUndefinedOrEmpty("")) console.log(isNullUndefinedOrEmpty("Nonempty string")) console.log(isNullUndefinedOrEmpty(undefined)) console.log(isNullUndefinedOrEmpty(null)) console.log(isNullUndefinedOrEmpty({})) console:log(isNullUndefinedOrEmpty({'key'. 'MyVal'})) console.log(isNullUndefinedOrEmpty('{}'))
你的选择真的:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.