2017-10-06 146 views
1

我在我的AngularJS(1.6.3)應用程序中發現了一個奇怪的行爲,我無法解釋。AngularJS Http請求同步處理?

我做什麼

我通過$state.go('.', {path: 'newPath'})和兩個兄弟組件的動態參數更改爲變化作出反應,他們$doCheck方法,如:

$doCheck() { 
    if(this.path !== this.$stateParams.path) { 
    this.path = this.$stateParams.path; 

    this.handleNewPath(this.path); 
    } 
} 

兩個組件做HTTP請求。我的問題出現了。

預期的行爲

由組件發起的請求不會互相影響。兩者都處理完全孤立的迴應。因此,有時候組件A首先得到它的響應,而不是先處理它,有時組件B會更快。

實際行爲

組分A發起請求,這需要大約550ms(450內容下載)。只要內容沒有完全下載,就不會執行其他請求。

我的問題

爲什麼AngularJS這樣的表現在這種情況下?我以前沒有確定過這樣的事情。通常,許多請求可以在並行中啓動。

奇怪行爲 enter image description here

正常行爲

enter image description here

更新

組分B包括Highchart。當我禁用該圖表時,所以請求被啓動,但不處理響應,請求的阻止似乎沒有了。

+0

這看起來像一個AngularJS問題,並不直接連接到Highcharts。你對Highcharts有任何問題嗎? –

回答

0

我相信,我發現了這個問題。

得到highcharts數據不是一個,那花了這麼長時間,這是我的錯誤讀控制檯的請求......

問題是

的響應數據highcharts原因highcharts開始渲染新數據,因此瀏覽器會重新渲染布局,這是一個同步過程。每個可能在渲染過程中發出的請求在渲染過程之後排隊,並且控制檯(可能有故障)顯示的內容下載持續時間爲450毫秒,實際上是瀏覽器渲染高分辨率所需的時間。

因此,我很抱歉提供了有誤導性的信息,但實際上我並不確定錯誤來自哪裏。