2016-04-07 13 views
1

Bir for döngüsünde birden çok async javascript Ajax isteği yürütme ve bir dizide senkronize olmayan nesneyi (bir dizide değil) json dizisi sonucunu alıyorum ve sonra tek bir dizi yapmak için bu diziyi cancat etmek zorunda olduğum bir durum var.Nesnelerin dizisinden ilk obejct nasıl sıralanır ve alınır birden çok async javascript çağrısına katılarak olsun?

Sorularım, bir döngüden gelen isteğin son sonuçlarının alınmasını ve diziden ilk kaydı yayınlamalarının ardından son diziyi nasıl sıralayabilirim? Zaman uyumsuz olarak sonuçlandığından, hangi isteğin en sonunda işleneceğini bilmiyorum. Ve senkronizasyon ajax isteğini kullanamıyorum.

Teşekkür

+0

Dizilerinizi tüm async çağrıları tamamlandıktan sonra sıralayabilirseniz, neden eş zamanlı olmayan çağrıların sırası önemlidir? – LinuxDisciple

cevap

0

bu Promises ile yapmanın en iyi yolu.

Promise.all([ 
    $.get('...url1'), 
    $.get('...url2') 
]).then(onSuccess, onFailure); 

function onSuccess(resultOfAllRequests) { 
    // do something with the results of all requests 
    // this won't be executed until all asynch requests are complete 
    var resultOfRequest1 = resultOfAllRequests[0]; 
    var resultOfRequest2 = resultOfAllRequests[1]; 

    var singleArrayOfAllResponses = Array.prototype.concat.apply(Array.prototype, resultOfAllRequests); 
    var sorted = singleArrayOfAllResponse.sort(function (a, b) { 
     // this is numeric sorting. use your own sort logic 
     return a - b; 
    }); 
    var first = sorted[0]; // <-- this is what you wanted 
} 

function onFailure(resultOfAllRequests) { 
    // one or many of the requests failed 
    // handle the error(s) here 
} 

Not: Sözler şu anda Internet Explorer desteklenmez. Here, tarayıcı desteğinin tam listesidir. IE desteğine ihtiyacınız varsa kullanabileceğiniz, sizin için Promises uygulayan birçok kütüphane vardır. En önemlisi q. Angular.js ayrıca $q adı verilen kendi vaat uygulamasına sahiptir.

İlgili konular