watch
watch中,如果我们观察一个属性,例如obj.foo
如果foo发生改变,发送请求,将请求结果赋值给 test
乍一看没有问题,但是如果这期间连续请求,
因为我们无法确定A返回的结果是否先于B返回的结果
就可能会发生如下
针对这种问题,watch给我们提供了onInvalidate函数进行注册过期回调函数
watch(obj.foo,async(new,old,onInvalidate)=>{
//定义一个标志代表当前副作用是否过期,默认false,表示没过期
let expired=false0
//注册过期回调
onInvaalidate(()=>{
//当过期时(也就是有新值进入进来)
expired=true
})
//发送网络请求
const res= await fet(‘dsadsa’)
if(!expied){
test=res
}]})
Reflect
有如下方法
Reflect.get()
//以下2种方法等价
const obj={fool:1}
//直接读取
console.log(obj.fool) //1
//使用Refelct.get()
Refelct.get(obj,'fool') // 1
有人就问了, 为什么读取都一样,为什么要加这样一个Refelct全局对象呢?
其实Refelct.get()方法还有第三个参数receiver,你可以把他理解为函数调用过程中的this指向
那有了这点我们就能做很多事情了
Reflect.set()
Reflect.apply()