2017-04-01 120 views
1

我試着使用$ q.defer,$ q.all和承諾,以等待HTTP的請求列表

我使用此代碼來調用$ Q。全部

$q.all(promises).then(function(data) { 
     console.log('All promises have resolved', data); 

     var retVal = Utils.DoStep2(); 
     console.log(retVal); 
}); 

這個函數永遠不會被調用,雖然我檢查並且$ http.get被調用所有的值。

  var deferred = $q.defer(); 
      $http.get(requestUrl). 
      then(function (data) { 
       var p = { 
        data: data, 
        name: name 
       }; 
       pData.push(p); 
       deferred.resolve(p); 
       return p; 
      }) 
      .catch(function (status) { 
       deferred.reject(status); 
      }); 

      promisesList.push(deferred.promise); 
上DoStep2的pData的長度,也

林印刷使用的pData的console.log 和我所得到的是0長度,看上去就像0對象,但是當我打開它,它看起來像所有的對象在每個特定調用的$ http.get調用中初始化,這使我確信接收到$ http.get響應,並且這是一個有效的響應。

此外,$全部都不會被調用什麼可能是錯誤的?

感謝您的幫助

+0

一種可能性是您沒有針對每個請求獲得成功響應。如果你有400個響應,那麼這個計數就是對'$ http.get'的拒絕。另一個是'.then()'中的直接運行時錯誤(我看不到'pData'聲明,所以'.push'可能會失敗。 –

+2

請提供[mcve]。也不應該使用'$ q.defer()'因爲'http http'本身返回一個承諾 – charlietfl

+1

其他問題:你推送'promisesList',但是在'promises'上調用'.all'。我個人最小化使用'$ q.defer()' - $ http.get'的結果是一個承諾,所以你可以直接推送它。 –

回答

1

OK設法解決它 我使用的服務功能的getService()和該函數返回的承諾,然後在每個呼叫我加入的getService()承諾返回promisesList這個名單我等待使用$全部,它的工作 非常感謝您的幫助。