shelving
Version:
Toolkit for using data in JavaScript.
29 lines (28 loc) • 871 B
JavaScript
import { isAsync } from "./async.js";
import { logError } from "./error.js";
/** Safely call a callback function (possibly with a value). */
export function call(callback, ...values) {
try {
const result = callback(...values);
if (isAsync(result))
result.then(undefined, logError);
}
catch (thrown) {
logError(thrown);
}
}
/** Return a callback function that safely calls a callback function (possibly with a value). */
export function called(dispatcher, ...values) {
return () => call(dispatcher, ...values);
}
/** Safely call a callback method (possibly wth a value). */
export function callMethod(obj, key, ...values) {
try {
const result = obj[key]?.(...values);
if (isAsync(result))
result.then(undefined, logError);
}
catch (thrown) {
logError(thrown);
}
}