attempt
Attempts to invoke a function with the provided arguments, returning either the result or the caught error object.
Use a try... catch
block to return either the result of the function or an appropriate error.
typescript
const attempt = (fn: (...args: any[]) => any, ...args: any[]) => {
try {
return fn(...args);
} catch (e) {
return e instanceof Error ? e : new Error(e);
}
};
typescript
let elements = attempt(function (selector) {
return document.querySelectorAll(selector);
}, ">_>");
if (elements instanceof Error) elements = []; // elements = []
const isValidNumber = (num: number) => {
if (num >= 0) {
return num;
}
throw new Error("Invalid number");
};
const ten = attempt(isValidNumber, 10);
assertEquals(ten, 10);
const error = attempt(isValidNumber, -1);
assertEquals(error instanceof Error, true);
assertEquals(error.message, "Invalid number");