Please good use of programming basic skills
Do you know what recursive, IIFE, ternary operation, and short circuit are? A basic-level developer/programmer should know these skills which can make you code simplify so much.
First, let's look this code:
checkError(obj) {
let errorMessage = ''
if (!_.isNull(obj)) {
if (!_.isUndefined(obj.error)) {
if (!_.isUndefined(obj.error.error)) {
errorMessage = obj.error.error
} else {
errorMessage = obj.error
}
} else {
errorMessage = obj
}
if (errorMessage !== '') {
if (!_.isUndefined(errorMessage.message)) {
SimpleAlert.alert('Error', errorMessage.message)
} else {
SimpleAlert.alert('Error', errorMessage)
}
}
}// isNull
}
Could you directly understand this code how to work? Let's split two sections.
First section:
if (!_.isUndefined(obj.error)) {
if (!_.isUndefined(obj.error.error)) {
errorMessage = obj.error.error
} else {
errorMessage = obj.error
}
} else {
errorMessage = obj
}
Second section:
if (errorMessage !== '') {
if (!_.isUndefined(errorMessage.message)) {
SimpleAlert.alert('Error', errorMessage.message)
} else {
SimpleAlert.alert('Error', errorMessage)
}
}
First section is to find error object. It needs to pass two-nested if-else until it gets error object.
Second section is to get message property from the error
object
// The code has 16 lines
let checkErrorV1 = (obj: any) => {
// Validate: Finish function life cycle if obj is null
if (obj === null) return;
// get errorMessage
let errorMessage = (function getErrorMessage(obj: any) {
let isUndefined = obj.error === undefined;
return isUndefined ? obj : getErrorMessage(obj.error);
})(obj);
if (!errorMessage) return;
// submit errorMessage by SimpleAlert
let isUndefined = errorMessage.message === undefined;
let message = isUndefined ? errorMessage: errorMessage.message;
SimpleAlert.alert('Error', message)
}
// The code has 15 lines
let checkErrorV2 = (obj: any) => {
// Validate: Finish function life cycle if obj is null
if (obj === null) return;
// get errorMessage
let errorMessage = (function getErrorMessage(obj: any) {
let isUndefined = obj.error === undefined;
return isUndefined ? obj : getErrorMessage(obj.error);
})(obj);
if (!errorMessage) return;
// submit errorMessage by SimpleAlert
let message = errorMessage.message || errorMessage;
SimpleAlert.alert('Error', message)
}
// The code has 13 lines
let checkErrorV3 = (obj: any) => {
if (!obj) return; // isNull or isUndefined
// get errorMessage
let error = (function getError(obj: any) {
return obj.error ? getError(obj.error) : obj;
})(obj);
if (!error) return; // isNull or isUndefined
// submit errorMessage by SimpleAlert
let message = error.message || error;
SimpleAlert.alert('Error', message)
}
// The code has 12 lines
let checkErrorV3 = (obj: any) => {
if (!obj) return; // isNull or isUndefined
// get errorMessage
let getError = obj => obj.error ? getError(obj.error) : obj;
let error = getError(obj);
if (!error) return; // isNull or isUndefined
// submit errorMessage by SimpleAlert
let message = error.message || error;
SimpleAlert.alert('Error', message)
}