1
在多個$ http請求完成後觸發函數的正確方法是什麼?我有2個選項,但我不確定哪個是正確的。請注意,'完成'日誌'one'和'two'已經完成。在角度中處理多個承諾的正確方法
首先,我只是將所有的$ http請求推送到一個數組,並使用$q.all(promises).then
來觸發最後的回調,我不記得我在哪裏看到這個,但它似乎工作正常(可能是因爲我的本地主機快在處理請求):
var one = $http.get("/request/one/"),
two = $http.get("/request/two/"),
promises;
one.then(function(response){
console.log('one');
});
two.then(function(response){
console.log('two');
});
promises = $q.all([one, two]);
promises.then(function(){
console.log('done');
});
其次,我已經看到了它在幾個教程,包括https://egghead.io/lessons/angularjs-q-all:
var one = $q.defer(),
two = $q.defer(),
promises;
$http.get("/request/one/").then(function(response){
one.resolve('one');
});
$http.get("/request/two/").then(function(response){
two.resolve('two');
});
promises = $q.all([one.promise, two.promise]);
promises.then(function(result){
console.log('done');
});
第二個被稱爲「延期反模式」。第一個是更好的。 –