У меня есть объект charts
,вызов асинхронной функции внутри цикла
var charts = {
chart1 : function(){
return {
key1 : value1,
key2: value2,
key3, value3
}
},
chart2 : function(){
return {
key1 : value1,
key2: value2,
key3, value3
}
},
chart3 : function(){
return {
key1 : value1,
key2: value2,
key3, value3
}
}
}
Функция callback
function callback(instance){
.....
.....
}
Я могу нарисовать диаграмму chart1
как это,
var chart = new Highcharts.Chart(charts.chart1(),callback);
// callback is a function which gets called when drawing of chart is completed.
И все графики, как это,
for(chart in charts){
if(charts.hasOwnProperty(chart)){
new Highcharts.Chart(charts.chart(),callback);
}
}
Но, рисуя много графиков, одновременно висит firefox. Итак, я хочу называть диаграммы один за другим при обратном вызове предыдущего графика. (Когда чертеж одного завершен, нарисуйте второй и т. Д.)
Я могу достичь этого, создав массив с именами каждого графика. В функции callback
я буду увеличивать индекс и вызывать следующий график.
Вот вопрос,
Как я могу нарисовать все графики без ручного создания списка имен диаграмм?
Да, это в значительной степени то, о чем я думал. Хотя вы удалили необходимость вручную создать список (массив). Я думал, что это может быть достигнуто без создания массива. – Jashwant
Вам нужно создать структуру данных другого типа, которая позволяет получать следующее значение в структуре данных каждый раз, когда диаграмма завершается. Массив является самой простой такой структурой данных. Объект не имеет последовательного доступа, поэтому вы не можете напрямую использовать объект. Его можно выполнять только с помощью 'for (x in y)', и это не будет работать для этого типа проблемы. Массив - это самый простой способ. – jfriend00
Кроме того, есть ли какая-то причина, что ваша структура данных «диаграмм» имеет в ней функции, а не только объекты в ней? В этом отношении, почему это не просто массив объектов, которые вы могли бы перенести в первую очередь. – jfriend00