@cloudcome/utils-core
Version:
cloudcome core utils
52 lines (51 loc) • 1.23 kB
JavaScript
import { isAsyncFunction } from "./type.mjs";
import { errorNormalize } from "./error.mjs";
function callbackCurry(cf, ...args) {
return function callbackCurried(callback) {
cf.apply(this, [...args, callback]);
};
}
function tryCallback(cf, ...args) {
return new Promise((resolve) => {
callbackCurry.apply(this, [cf, ...args])((err, res) => {
if (err) {
resolve([errorNormalize(err), void 0]);
} else {
resolve([void 0, res]);
}
});
});
}
function trySync(syncFn) {
try {
return [void 0, syncFn()];
} catch (err) {
return [errorNormalize(err), void 0];
}
}
function tryAsync(asyncFn) {
return asyncFn().then(
(res) => [void 0, res],
(err) => [errorNormalize(err), void 0]
);
}
function tryPromise(promise) {
return promise.then(
(res) => [void 0, res],
(err) => [errorNormalize(err), void 0]
);
}
function tryFlatten(flattenAble) {
if ("then" in flattenAble) {
return tryPromise(flattenAble);
}
if (flattenAble.length === 0) {
if (isAsyncFunction(flattenAble)) return tryAsync(flattenAble);
return trySync(flattenAble);
}
return tryCallback(flattenAble);
}
export {
tryFlatten
};
//# sourceMappingURL=try.mjs.map