UNPKG

@cloudcome/utils-core

Version:
52 lines (51 loc) 1.23 kB
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