Код работает в консоли, но не при загрузке сайта

Мой код работает в консоли, но не при загрузке сайта.

function getData() {
    var a = [];
    d3.csv("../csv/master.csv").get(function (error, rows) {
        for (var i = 0; i < rows.length; i++) {
            a.push(rows[i]);
        }
    });
    return a; 
}
a = getData();
alert(a[0].agency);

Как ни странно, переменная a, кажется, загружается веб-сайтом, как я могу вызвать его в консоли, но предупреждение выдает ошибку.

("Uncaught TypeError: Cannot read property 'agency' of undefined")

Когда я вызываю точно такое же предупреждение в консоли, оно работает отлично.

Есть идеи?

Спасибо,

Jonas

1 ответ

Решение

d3.csv Метод выдает асинхронный запрос, поэтому возможно, что в версии веб-сайта файл csv еще не был полностью загружен при попытке доступа к данным. Вы, вероятно, должны реорганизовать свой код и поместить логику, которая зависит от данных, в функцию обратного вызова. Вы также можете вызвать событие, когда загрузка данных будет завершена, и заставить другой объект прослушивать это событие, чтобы начать рисование.

d3.csv('../csv/master.csv', function(error, rows) {
    // The data is available here
    alert(rows[0].agency);
});

Больше информации о d3.csv в документах.

РЕДАКТИРОВАТЬ: Как @elclanrs указал, предыдущий код не смог объяснить, что опубликованный код должен быть реорганизован, поэтому я обновил ответ.

Другие вопросы по тегам