借助方法装饰器,我们可以获取到方法对应的函数,从而在不直接调用方法的情况下调用方法(对不起,我找不到更好的词了……)
完整代码:
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)
}
}
如上图所示,此时运行程序即可在控制台输出接口返回内容