UNPKG

@truenewx/tnxcore

Version:

互联网技术解决方案:JavaScript核心扩展支持

43 lines (41 loc) 1.56 kB
/** * 具有默认错误处理函数的Promise * 当调用者未catch时,由默认错误处理函数兜底;调用者有catch时,默认错误处理函数不会执行 */ export default class SafePromise<T> extends Promise<T> { constructor( executor: (resolve: (value: T) => void, reject: (reason?: any) => void) => void, defaultErrorHandler?: (err: any) => void, ) { if (typeof defaultErrorHandler !== 'function') { super(executor); } else { super((resolve, reject) => { const errorContainer: { cause?: any } = {}; const caughtReject = (cause: any) => { errorContainer.cause = cause; reject(errorContainer); setTimeout(() => { if (errorContainer.cause) { defaultErrorHandler(errorContainer.cause); } }, 10); }; try { executor(resolve, caughtReject); } catch (e) { caughtReject(e); } }); } } catch<U = never>(handler: (reason: any) => U | PromiseLike<U>): Promise<U> { return super.catch((error: any) => { const cause = error && error.cause; if (error && 'cause' in error) { delete error.cause; } return handler(cause); }) as Promise<U>; } }