0
我提出3 GET JSON調用myFunction()
被調用按鈕上點擊多的getJSON調用。這些getJSON中的2個依賴於彼此的執行。它基本上解析10個網頁並收集一些數據。有了這些數據,它會轉到另一個頁面並收集一些其他數據。我想顯示「DONE」在myFunction
末,使用戶知道我們終於得到了所有數據和搜索操作完成。然而,我認爲這些調用是異步的,所以我使用延遲對象。但是,即使我傳遞給$.when.apply(call1,call2,call3)
所有的呼叫,它會顯示「DONE」被打印在控制檯上的任何數據之前。一旦它打印出「完成」,它就開始打印結果。如何修改我的代碼,這樣我就能夠顯示「完成」只有當myFunction的已經爲所有10張完全跑出,並已印在控制檯上的所有數據。遞延對象與互相依賴
var call1 = [];
var call2 = [];
var call3 = [];
function myFunction() {
data3 = [];
url = ''; // some URL here
call3.push($.getJSON(url, function(data4) {
data3 = data4;
}));
for (var page = 1; page < 10; page++) {
(function(page) {
url = 'http://example.com/' + page;
call1.push($.getJSON(url, function(data1) {
for (var num = 0; num < data1.standings.results.length; num++) {
(function(num) {
url = 'http://example.com/' + data1.entry[num];
call2.push($.getJSON(url, function(data2) {
for (var i = 0; i < 15; i++) {
(function(i) {
console.log(data3.ele[(data2.p[i].element) - 1].x);
return;
}
})(i);
}
})
);
})(num);
}
})
);
})(page);
};
$.when.apply(call1, call2, call3).then(function() {
console.log("DONE");
});
}
請[正確縮進您的代碼](http://jsbeautifier.org/)。沒有人會解決這個問題。 – Bergi
是的,@Bergi完成了,謝謝@brk! –
你不會進行3'getJSON'調用,你可以在嵌套循環中做很多。你的承諾結構需要反映這一點。 – Bergi