2016-08-02 71 views
-3

(請不要標記爲重複或至少指向正確的答案,因爲我在這裏處理多個請求以形成一個數組)。我使用返回的「data」值作爲數組設置了一些url調用。我打算使用這個數組來創建所有這些值的總和。循環一堆異步操作並等待它們全部完成?

var data_num=[]; 
$.each(arr_urls, function(index, value) { 

    $.getJSON(arr_urls[index], function (data) { 
     data_num.push(data); 
    }); 
}); 
alert(data_num); 

回答

1

你可能已經很熟悉爲什麼這並不工作,並有在an oft linked duplicate優秀的解釋。不過,這不是完全是的重複。因爲您不是這樣問的:

如何從異步操作返回響應?

你問更多的東西是這樣的:

如何遍歷一羣異步操作,等待他們全部完成?

爲此,您首先需要將它們放入數組中。事情是這樣的:

var my_promises = []; 
var data_num = []; 
$.each(arr_urls, function(index, value) { 
    my_promises.push($.getJSON(arr_urls[index], function (data) { 
     data_num.push(data); 
    })); 
}); 

這應該給你打電話promises數組持有到當前執行的異步操作的引用。現在你只需要等待他們完成。事情是這樣的:

$.when.apply($, my_promises).then(function() { 
    alert(data_num); 
}); 

本應適用的.when()功能的承諾的整個陣列,只執行當整個陣列已完成回調。

-1

我會假設你不能做那個服務器端(這將是最好的事情)。

好的,第一件事第一件:你爲什麼做$.getJSON(arr_urls[index]?如果你想要做的使用$.each,你應該使用value,甚至更好:使用循環

for (var i = arr_urls.length - 1; i >= 0; i--) { 
    arr_urls[i] 
} 

而且,你爲什麼不嘗試做一個console.log(data)看到JavaScript控制檯對什麼是返回?您的瀏覽器控制檯甚至可以告訴您網站網址的請求是否有錯誤。

+0

一旦你有足夠的[聲譽](http://stackoverflow.com/help/whats-reputation)你將能夠[評論任何職位](http://stackoverflow.com/help/privileges/comment );相反,[提供不需要提問者澄清的答案](http://meta.stackexchange.com/questions/214173/why-do-i-need-50-reputation-to-comment-what-c​​an- I-DO-代替)。 – Dethariel

+0

對不起,我在這裏還是很新的。仍然得到它的縈繞。但是,感謝您的鏈接,我會照顧。 –