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響應,並且這是一個有效的響應。
此外,$全部都不會被調用什麼可能是錯誤的?
感謝您的幫助
一種可能性是您沒有針對每個請求獲得成功響應。如果你有400個響應,那麼這個計數就是對'$ http.get'的拒絕。另一個是'.then()'中的直接運行時錯誤(我看不到'pData'聲明,所以'.push'可能會失敗。 –
請提供[mcve]。也不應該使用'$ q.defer()'因爲'http http'本身返回一個承諾 – charlietfl
其他問題:你推送'promisesList',但是在'promises'上調用'.all'。我個人最小化使用'$ q.defer()' - $ http.get'的結果是一個承諾,所以你可以直接推送它。 –