目前的evalAsync机制
就是在每次$digestOnce以后执行一下async队列内的eval函数。可是目前有一个问题:就是只有在脏值为true的时候才会去执行这个队列中的内容:
画红圈的部分为真才会进行下一次循环也就是说,如果我的scope是干净的,就算我的async队列中有内容,也不会执行。那么解决这个问题的思路很简单,就是我要判断一下,async队列中是否有内容,有内容就要执行掉。
所以很容易改,改成下面这样:
但是仍然是有问题的:如果我每次digestOnce的时候都往队列里增加一个要执行的函数(比如我在watchFn里面添加函数,因为每次digestOnce的时候watchFn都会被执行),那么这个循环将变成死循环。
所以相应的解决方式是,在ttl检查的时候,也要把async检查进去,变成这样:
image.png这样一来,问题就解决了。
网友评论