2016-04-11 19 views
0

Eşzamanlı sırada kontrol etmek istediğim ve başarısız olursa, bir sonraki sayfaya geçmek için bir dizi Facebook grup kimliğim var. Hepsi tamamlandığında, tüm sonuçları sunucuma göndermek istiyorum.

var groups = [1111,2222,3333]; 
var feed_collection = []; 

// Unfortunately this for loop does not wait for the FB api calls to finish before looping to next 
for(var x = 0; x < groups.length; x++){ 
    FB.api("/"+groups[x]+"/feed", function(response, err){ 
     feed_collection += response; 
    }); 
} 
// Send the feed_collection to server 
feed_collection.sendToServer(); 

nasıl döngü beklemek için alabilirsiniz:

Aşağıdaki kod I (tabii ki çalışmaz) başarmak istediğiniz özünü açıklıyor? $q.all()'u kullanabileceğimi biliyorum, ancak vaatleri nasıl oluşturacağımı ve onları bir promise_array'a nasıl kaydedeceğime takılıyorum. Bu kod istemci tarafında ve AngularJS 1 kullanıyorum, ancak herhangi bir yaklaşıma açığım. Mucho gracias!

cevap

3
function getGroupFeed(groupId) { 
    var deferred = $q.defer(); 
    FB.api('/' + groupId + '/feed', function (response, err) { 
    if (err) return deferred.reject(err); 
    return deferred.resolve(response); 
    }); 
    return deferred.promise; 
} 

Angular'de bu şekilde hızlı bir şekilde nasıl söz üretebilirsiniz. Eğer döngü için ısrar ederseniz

var groupPromises = groups.map(function (groupId) { 
    return getGroupFeed(groupId); 
}); 

Veya:: Artık ayrıca vaatlerle bir dizi oluşturabilir

var groupPromises = []; 
for (var i = 0, len = groups.length; i < len; i++) { 
    groupPromises.push(getGroupFeed(group[i])); 
} 

sözler Bu dizi daha sonra $q.all kullanılabilir, sadece bir kez tüm çözülürse hangi dizide sözler çözülür.

+0

Bunu bir for döngüsünde yürütmek için nasıl alabilirim? Bir for döngüsünde 'getGroupFeed' işlevini sarmalamak kadar basit mi? –

+2

Yine de bu senkron değil. – Avinash

+1

@KangzeHuang, döngü için kullanmak zorunda değilsiniz. Bu yaklaşım size promise_array için sorduğunuz şeyi verir ve döngü için olduğundan daha fazla okunabilir ve daha az hatalıdır. – Avinash