javascript aop面向切面编程
npm install zzq-aop``bash`
npm i zzq-aop
`js
function targetFn() {
console.log('wait 2s...');
return new Promise((resolve) => {
setTimeout(() => {
console.log(2);
resolve(2);
}, 2000);
});
}
const beforeCtx = {
data: 1,
beforeFn() {
console.log('wait 1s...');
return new Promise((resolve) => {
setTimeout(() => {
console.log(this.data);
resolve(this.data);
}, 1000);
});
}
}
const afterCtx = {
data: 3,
afterFn(time) {
console.log(wait ${time}ms...);
return new Promise((resolve) => {
setTimeout(() => {
console.log(this.data);
resolve(this.data);
}, time);
});
}
}
function moreAfterFn() {
console.log('Finished');
}
const AOP = require('zzq-aop').default;
async function test() {
// 链式调用
const aopIns = AOP.create(targetFn)
.before(beforeCtx.beforeFn, beforeCtx)
.after(() => afterCtx.afterFn(1000), afterCtx);
aopIns.after(moreAfterFn);
const runRet = await aopIns.run();
console.log('返回值列表:', runRet);
}
test();
`
创建aop实例,第一个参数为执行函数,第二个参数为执行上下文对象,均可选,执行上下文不传则默认为global
在调用链前插入函数,返回this用于链式调用
第一个参数为执行函数,必传
第二个参数为执行上下文对象,可选,执行上下文不传则默认为create获取的执行上下文
在调用链后插入函数,返回this用于链式调用
第一个参数为执行函数,必传
第二个参数为执行上下文对象,可选,执行上下文不传则默认为create获取的执行上下文
执行整个调用链,返回Promise,将resolve调用链每个函数的返回值组成的数组,无法在run`函数后面继续链式调用。