天天看點

fixture.detectChange如何通過Angular zone執行其異步邏輯的

調試出發點:

fixture.detectChange如何通過Angular zone執行其異步邏輯的

在detectChange内部本身有一個ngZone:

fixture.detectChange如何通過Angular zone執行其異步邏輯的
fixture.detectChange如何通過Angular zone執行其異步邏輯的

接下來會在this.ngZone裡執行箭頭函數的邏輯,即this._tick():

fixture.detectChange如何通過Angular zone執行其異步邏輯的

this.ngZone.run裡面調用_inner的run方法:

fixture.detectChange如何通過Angular zone執行其異步邏輯的

this._zoneDelegate.invoke:

fixture.detectChange如何通過Angular zone執行其異步邏輯的

ZoneDelegate.invoke方法内部, 調用this._invokeZS.onInvoke:

fixture.detectChange如何通過Angular zone執行其異步邏輯的

onInvoke:首先onEnter進入Zone:

fixture.detectChange如何通過Angular zone執行其異步邏輯的

onEnter方法,修改zone._nesting的層數:

fixture.detectChange如何通過Angular zone執行其異步邏輯的

parentZoneDelegate.invoke: 調用callback,Angular單元測試代碼裡調用fixture.detectChanges, 内部放入zone執行的this._tick():

fixture.detectChange如何通過Angular zone執行其異步邏輯的

繼續閱讀