2015-12-08 123 views
1

當使用$http我們可以爲它設置超時時間,它會是這個樣子:

$http.get(url,{timeout: 5000}).success(function(data){}); 

那是什麼意思超時?這是否意味着連接(數據下載)必須在超時期限內完成?或者它是指從服務器接收響應的延遲時間?移動連接最好的一般最小超時設置是什麼?

回答

3

如果http請求未在指定的timeout時間內完成,則會觸發錯誤。

所以,這是一種像說出以下的$http.get()功能:

  1. 我想請你去給我拿這個URL,讓我的數據
  2. 如果你這樣做成功,然後打電話給我的.success()處理程序,並給我的數據。
  3. 如果請求花費比5000ms更長的時間完成,那麼不是繼續等待,而是觸發超時錯誤。

僅供參考,它看起來對我來說,AngularJS已經轉換爲使用標準承諾的語法,所以你可能應該這樣做:

$http.get(url,{timeout: 5000}).then(function(data){ 
    // successfully received the data here 
}, function(err) { 
    // some sort of error here (could be a timeout error) 
}); 

那是什麼超時意思?這是否意味着連接(數據下載)必須在超時期限內完成?

是的。如果在該時間段內沒有完成,它將會返回一個錯誤。這避免了等待很長時間的請求。

或者它是指從服務器接收響應的延遲時間?

不,這不是延遲時間。

什麼是移動連接的最佳一般最小超時設置?

這很難說,沒有更具體的細節。許多不同的事情可能會驅動你設定的目標。有時,如果服務器或某些移動鏈接某天發生特別緩慢的情況,並且希望儘可能多地讓這些超時值成爲相當長的值(例如120秒)情況。在其他情況下(取決於具體的用戶交互),如果響應時間超過5秒,則用戶將放棄,因此可能沒有等待的時間長於用戶已經放棄的結果。

+0

感謝您的回答。你的意思是說數據必須在5秒內完成(基於我的例子),否則它會認爲失敗?這是否意味着如果服務器在5秒內做出響應,但要檢索的數據很大,需要30秒才能下載。那意味着連接總會被視爲失敗? – user1995781

+0

@ user1995781 - 當響應本身需要很長時間下載時,超時的工作原理在AngularJS文檔中沒有描述,所以唯一確定的方法是研究AngularJS代碼並瞭解它如何處理超時。超時將描述沒有網絡活動的時間長度,而不是整個響應下載的時間。但是,我真的不知道,如果你想知道,你必須找到在AngularJS代碼中實現超時或者測試它。 – jfriend00

+0

@ user1995781 - 通過查看相關的[AngularJS源代碼](https://github.com/angular/angular.js/blob/d077966ff1ac18262f4615ff1a533db24d4432a7/src/ng/httpBackend.js)可以看出最好的結果,超時值是請求完全完成的時間,以便包括任何時間下載任何響應。 – jfriend00

0

超時- {號|服務承諾} - 以毫秒爲單位超時或承諾解決時應中止請求。 Source

超時意味着「在X時間後執行一個操作」,反正在JS中。