Throw
const isNumber = (value) => typeof value === 'number';
const sum = (a, b) => {
if (isNumber(a) && isNumber(b)) {
return a + b;
}
throw new Error('a and b should be numbers');
};
try {
console.log(sum(2, 3));
} catch (err) {
console.log(err.message);
}
try {
console.log(sum(7, 'A'));
} catch (err) {
console.log(err.message);
}
Return tuple or struct
const sum = (a, b) => {
if (isNumber(a) && isNumber(b)) {
return [null, a + b];
}
return [new Error('a and b should be numbers')];
};
console.log(sum(2, 3));
console.log(sum(7, 'A'));
Callback
const sum = (a, b, callback) => {
if (isNumber(a) && isNumber(b)) {
callback(null, a + b);
} else {
callback(new Error('a and b should be numbers'));
}
};
sum(2, 3, (err, result) => {
if (err) {
console.log(err.message);
return;
}
console.log(result);
});
sum(7, 'A', (err, result) => {
if (err) {
console.log(err.message);
return;
}
console.log(result);
});
Promise
const sum = (a, b) =>
new Promise((resolve, reject) => {
if (isNumber(a) && isNumber(b)) {
resolve(a + b);
} else {
reject(new Error('a and b should be numbers'));
}
});
sum(2, 3)
.then((data) => {
console.log(data);
})
.catch((err) => {
console.log(err.message);
});
sum(7, 'A')
.then((data) => {
console.log(data);
})
.catch((err) => {
console.log(err.message);
});
Async throw
const sum = async (a, b) => {
if (isNumber(a) && isNumber(b)) {
return a + b;
}
throw new Error('a and b should be numbers');
};
try {
console.log(await sum(2, 3));
} catch (e) {
console.log(e.message);
}
try {
console.log(await sum(7, 'A'));
} catch (err) {
console.log(err.message);
}