0
前に終了関数を呼び出します。Ajaxの非同期性は、これは私がに苦しんでいたコードである内部ループ機能
$(document).ready(function() {
var dataSets = [];
getSensorIDs().done(function (result) {
var sensorIDs = jQuery.parseJSON(result);
$.each(sensorIDs, function (index, value) { //loop through each id
getDataBySensorID(value.id).done(function (res) {
var temperatureData = jQuery.parseJSON(res);
var dataPoints = [];
$.each(temperatureData, function (index, value) {
dataPoints.push({
x: index
, y: value.value
});
})
dataSets.push(buildDataset(dataPoints, 1));
alert("Pushed something.");
});
});
alert("Drawed something.");
drawChart(dataSets);
})
});
問題がある:Drawed something
は、プログラムの流れをだろう、それを見て好きではないにもかかわらず、先にPushed something
の起こります。私はのajax(それは非同期です)を.done()
で修正したと思いましたが、それはそうではありません。この問題の適切な修正は何でしょうか?
現在、 'dataSets'が空であるため、ネストされたコードブロックでデータセットを作成し、次に' drawChart'を呼び出すようにコードを書き直すにはどうすればよいですか? – binaryBigInt
私は 'alert("何かを描いた "); drawChart(dataSets); '' $ .each'ループの直前にあります。 –
最後の非同期コールバックで 'drawChart'を呼び出す必要があります。約束がこれで助けになるなら、あなたは 'Promise.all()'を使って約束がすべて完了するのを待つことができます。 – Barmar