@codelet/core
Version:
mini core
34 lines (33 loc) • 1.06 kB
JavaScript
import { formatMessage } from '@daysnap/utils';
// 默认配置
const defaultOptions = {
formatMessage,
excludeMessage: (message) => !message,
};
export function createWithError(options) {
const { formatMessage, excludeMessage } = Object.assign(defaultOptions, options);
return (fn) => {
return async (...params) => {
let ctx = null;
if (params.length > fn.length) {
ctx = params[params.length - 1];
// 为了支持 withLoading
if (ctx.setData) {
params.pop();
}
}
try {
ctx?.setData?.({ error: '' });
return await fn(...params);
// eslint-disable-next-line no-useless-catch
}
catch (error) {
const message = formatMessage(error);
if (!excludeMessage(message)) {
ctx?.setData?.({ error: message });
}
throw error;
}
};
};
}