Skip to content

Latest commit

 

History

History
137 lines (116 loc) · 1.89 KB

2-8-Errors.md

File metadata and controls

137 lines (116 loc) · 1.89 KB

2.8. Exceptions and error handling

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);
}