借助方法装饰器,我们可以获取到方法对应的函数,从而在不直接调用方法的情况下调用方法(对不起,我找不到更好的词了……)
完整代码:
import axios from 'axios' // 装饰器工厂模式,允许用户传入自己的URL const get = (url: string): MethodDecorator => { // 返回方法装饰器,第三个参数即是函数的定义 return (target: Object, propertyKey: string | symbol, description: any) => { axios.get(url) .then((res) => { // 获取并调用函数 const fnc = description.value fnc(res, { status: 200, success: true, }) }) .catch((e) => { const fnc = description.value fnc(e, { status: 500, success: false, }) }) } } class Controler { // 装饰器语法 @get('https://api.apiopen.top/api/getHaoKanVideo') getList(res: any, sta: any) { console.log(res.data.result.list) console.log(sta) } }
如上图所示,此时运行程序即可在控制台输出接口返回内容