Appearance
TryCatch函数装饰器
1. 装饰器代码
js
function catchFunc(type, e) {
switch (type) {
case null:
case "null":
return null;
case "http":
return {
code: 0,
message: e.message,
timestamp: new Date().getTime(),
};
case "message":
return e.message;
}
}
export function Try(type = null) {
return function (target, propertyKey, descriptor) {
const fn = descriptor.value;
const isAsyncFunc = fn.constructor.name === "AsyncFunction";
if (isAsyncFunc) {
descriptor.value = async function (...args) {
try {
return await fn.call(this, ...args);
} catch (e) {
return catchFunc(type, e);
}
};
} else {
descriptor.value = function (...args) {
try {
return fn.call(this, ...args);
} catch (e) {
return catchFunc(type, e);
}
};
}
return descriptor;
};
}
2. 装饰器使用
js
import { Try } from "decorator.js";
@Try('http')
async doItAsync(params) {
throw new Error("http error");
}
// 返回
// {
// code: 0,
// message: "http error",
// timestamp: xxxx,
// }
@Try('message')
doIt(params) {
throw new Error("message error");
}
// 返回
// "message error"