目前的evalAsync機(jī)制
就是在每次$digestOnce以后執(zhí)行一下async隊(duì)列內(nèi)的eval函數(shù)儿子。可是目前有一個問題:就是只有在臟值為true的時候才會去執(zhí)行這個隊(duì)列中的內(nèi)容:
畫紅圈的部分為真才會進(jìn)行下一次循環(huán)
也就是說搏恤,如果我的scope是干凈的钠绍,就算我的async隊(duì)列中有內(nèi)容媒熊,也不會執(zhí)行宏胯。那么解決這個問題的思路很簡單,就是我要判斷一下肢专,async隊(duì)列中是否有內(nèi)容舞肆,有內(nèi)容就要執(zhí)行掉焦辅。
所以很容易改,改成下面這樣:
image.png
但是仍然是有問題的:如果我每次digestOnce的時候都往隊(duì)列里增加一個要執(zhí)行的函數(shù)(比如我在watchFn里面添加函數(shù)椿胯,因?yàn)槊看蝑igestOnce的時候watchFn都會被執(zhí)行)筷登,那么這個循環(huán)將變成死循環(huán)。
所以相應(yīng)的解決方式是压状,在ttl檢查的時候仆抵,也要把a(bǔ)sync檢查進(jìn)去,變成這樣:
image.png
這樣一來种冬,問題就解決了镣丑。