Вместо вашего while
цикла (как вы определили, не совсем то, что вы хотите), используйте setTimeout
.
$.getJSON(..., ..., function(data) {
processData();
function processData() {
if (!($graph.series && $graph.series[0])) {
// Not ready yet, schedule to try again in a moment
// and quit
setTimeout(processData, 0);
return;
}
// It's there, process
$graph.series[0].setData(data);
}
});
Задержка, конечно, будет больше, чем 0
миллисекунд(обычно не менее 5-10), но это дает другому коду возможность инициализировать этот объект для вас.Возможно, вы захотите добавить тайм-аут, чтобы вы не зацикливались бесконечно, если что-то пошло не так.может, потому что processData
является замыканием в контексте обратного вызова, поэтому он имеет постоянную ссылку на все, что находится в области действия в этом контексте (включая data
).Подробнее: Затворы не сложны