我正面臨着$ http服務的這個奇怪問題:每一個對我所工作的公司提供的API的請求都包含在$ q.all()中,並返回相同的響應。多個請求,相同的響應
var promises = [
$httpPromiseA(),
$httpPromiseB(),
$httpPromiseC()
];
$q.all(promises)
.then(function (response) {
$log.log(response);
});
// $log.log returns [expectedObjectFromA, expectedObjectFromA, expectedObjectFromA]
這是隨機發生的:expectedObjectFromA可以是expectedObjectFromB或expectedObjectFromC。事實上,所有三個對象返回相同,或兩個一個,其他等。
如果我鏈接一個接一個,以線性方式,他們都工作完美,但需要更多時間來當然,完成任務。
var def = $q.deferred();
var resolvedData = [];
$httpPromiseA()
.then(function (response) {
$log.log(response);
resolvedData.push(reponse);
return $httpPromiseB();
})
.then(function (response) {
$log.log(response);
resolvedData.push(reponse);
return $httpPromiseC();
})
.then(function (response) {
$log.log(response);
resolvedData.push(reponse);
return def.resolve(resolvedData);
});
return def.promise();
// $log.log returns [expectedObjectFromA],
// [expectedObjectFromB] and [expectedObjectFromC]
// as expected. ResolvedData brings [expectedObjectFromA,
// expectedObjectFromB, expectedObjectFromC].
你能給我一些指示,說明這裏可能發生了什麼嗎?
我正在使用$ http和$ q的核心實現。我已經嘗試了一個$ q.allSettled,作爲$ decorator應用,基於Kris Kowalk的Q的API資源,但沒有成功。
謝謝。
編輯1:
我無法通過函數的參數分開,因爲它是一個包裝函數調用多數民衆贊成在$http
服務,在這裏我的應用程序。包裝函數期望String
作爲第一個參數,而Object
作爲第二個參數。包裝函數返回$http
調用。
編輯2:
這Plunker調用2個併發請求,一到Instagram的API,另一個Flickr的API。這個問題不會發生在這個Plunker上。我真的不知道如何處理這個麻煩。這真的很煩人。
var promises = [$ httpPromiseA(),$ httpPromiseB(),$ httpPromiseC()]; (函數(responseA,responseB,responseC){$ log.log(response);}); // $ log.log返回[expectedObjectFromA,expectedObjectFromA,expectedObjectFromA]。您需要分別收集諾言中的每個回覆。嘗試上面的代碼更改希望它起作用 – 2014-10-08 04:59:09
@CoderJohn你看到了這個問題?你的解決方案沒有意義。嘗試處理一個'$ q.all()'就像你建議的那樣...... – 2014-10-08 05:06:22
爲了澄清,你是否試圖解決一個錯誤的/損壞的API,當你嘗試使用併發請求時有時會中斷? – 2014-10-08 07:10:23