接上文
上文我们实现了一个简单的AOP,但是其实还是存在问题的。
问题在哪里?
回到我们最开始的问题。我们希望的是,在我们的请求开始的时候调用loading,在我们请求结束的隐藏loading。我们以前的代码看起来没有问题。但是真的没有问题吗?实际上我们用这份代码做测试的时候我们就会发现问题所在了。因为异步的存在。
这里就不再探讨异步是什么了,我相信你能听懂我再说什么。
// 执行器
function actuator(obj){
if(obj){
if(typeof obj === 'function'){
obj()
}
if(obj instanceof Array){
obj.forEach(fn => {
if(typeof fn === 'function'){
fn()
}
});
}
}
}
function Action(actions){
return function(){
try{
// 执行before
actuator(actions.before)
// 执行 service
actuator(actions.service)
// 执行after
actuator(actions.after)
} catch(err){
actuator(actions.error)
}
}
}
在这个代码里面 我们没有去处理异步的东西。我们首先要做的,就是处理异步。给出解决方案 使用 async跟await
async function actuator (obj) {
if (obj) {
if (typeof obj === &#