[英]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.