重複の可能性:
関数を setTimeout にループで渡す: 常に最後の値?
問題に対処するにはクロージャーを使用する必要があることはわかっていますが、その方法がわかりません。サーバーからデータを取得する機能があります。
function loadGraph(chartDataStreams) { //length of chartDataStreams is two
initCharts(); //init charts area
for (c in chartDataStreams) {
var chartData = [];
alert(c); // says : 0, then 1
getDataFromServer(chartDataStreams[c].x, chartDataStreams[c].y,function (data) {
for (d in data.datapoints) {
var item = { date: new Date(data.datapoints[d].at), value:data.datapoints[d].value };
chartData.push(item);
}
alert(c); // says: 1 then 1
updateGraphData(chartData);
});
}
}
この関数では、グラフ データ プロバイダーを chartData で更新する updateGraphData を呼び出す必要があります。問題は、chartData に実際のデータだけでなく、前のループ サイクルのデータも含まれていることです。これはクロージャーを使用する適切な場所だと思いますが、方法がわかりません.. 何かアイデアはありますか?
//編集: 誤って chartData の宣言を getDataFromServer 関数の外に置いてしまいましたが、まだ 1 つの問題があります。編集されたコードを確認してください。2 番目のアラートから、1,1 だけでなく、0 と 1 を言いたい