我正在使用Restangular對服務器執行多個同時調用。 Restangular回報承諾每一個行動,他們每個人都需要做一些具體的回報,一旦所有3完成,他們的.then
功能已完成,我需要執行另一個功能。作爲一個羣體等待多個承諾,單個角度?
這是在這種情況下做承諾的正確方法嗎?
var a, b, c;
a = service1.getList(...).then(function A(data) { do something; $log.debug('a'); return 'a';});
b = service2.getList(...).then(function B(data) { do something; $log.debug('b'); return 'b';});
c = service3.getList(...).then(function C(data) { do something; $log.debug('c'); return 'c';});
$q.all([a,b,c]).then(function wrapUp(values) { $log.debug(values); do something after functions A, B,and C above have finished;}
我不知道,如果$ q.all()將在A,B和C的最末端運行,或者它可能在最後一個函數的前面比賽。 wrapUp()總是被稱爲last?
注意,A,B和C是承諾a,b和c完成後調用的函數。
傳遞給wrapUp的values數組似乎是A,B和C的返回值。但是,在我的控制檯中,函數A記錄10次,然後函數B記錄10次,然後函數C和函數包裝都記錄10次(交替)。
10倍的記錄看起來像是壞了.....,以及擔心競爭條件似乎是一個可能性....
有人能解釋這是怎麼回事?
我測試了你的場景,它工作得很好,應該有另外一種情況,你怎麼觸發這個,也許我們應該看看?這裏你的場景在restangular模板http://plnkr.co/edit/Wp0FEVz8iwOyXf84pZ8h?p=preview –
ng-grid似乎是罪魁禍首,不知何故,即使這個處理程序被稱爲10次restangular只發送3個請求到網絡服務器(作爲預期)每個嘗試的10個響應。冗餘結合請求是否相同,只是將它們添加到第一個請求所返回的承諾中? – boatcoder