2016-10-10 21 views
0

我有一個功能,使得$ http.get請求從一個陣列

var ids = [1,2,3] 
var extensionPromises = []; 
    for (var i = 0 ; i < extensions.length ; i++) { 

     var myPromise = myHttpService.getOneExtension(ids[i]); 
     extensionPromises.push(myPromise); 
    } 

return $q.when(
     Promise.all(extensionPromises).then(function(all){ 

      $rootScope.$broadcast("allReady"); 
      return true; 
     }).catch(function(error){ 
      var e = {}; 
      e.error = error; 
      e.error.type = "http.get"; 
      return (e); 
     }) 
); 

即發送ID到一個簡單的$http.get(myUrl + id).then()...,所有的工作確定一個服務裏面,但是當我看到XHR獲取信息的控制檯,它以相反的順序解決,即3,2,1。

這是正常的嗎?

回答

0

對於多個異步請求的解析順序沒有保證。它們受到網絡時間,服務器時間等的影響。即使是對同一端點的兩個請求也可能不會按照它們發送的順序返回

+0

我也有這種想法,但我始終得到相同的結果,而且很奇怪... – distante

+0

也不需要在'$ q.when'裏面使用'Promise.all' ...可以使用'$ q.all()' – charlietfl

+0

啊!我不知道'$ q.al()l',謝謝! – distante