目前的evalAsync機制
就是在每次$digestOnce以后執行一下async隊列內的eval函數。可是目前有一個問題:就是只有在臟值為true的時候才會去執行這個隊列中的內容:
畫紅圈的部分為真才會進行下一次循環
也就是說,如果我的scope是干凈的,就算我的async隊列中有內容,也不會執行。那么解決這個問題的思路很簡單,就是我要判斷一下,async隊列中是否有內容,有內容就要執行掉。
所以很容易改,改成下面這樣:
image.png
但是仍然是有問題的:如果我每次digestOnce的時候都往隊列里增加一個要執行的函數(比如我在watchFn里面添加函數,因為每次digestOnce的時候watchFn都會被執行),那么這個循環將變成死循環。
所以相應的解決方式是,在ttl檢查的時候,也要把async檢查進去,變成這樣:
image.png
這樣一來,問題就解決了。