Переменная scope в d3 javascript

Я хочу получить данные в глобальной переменной, используя следующий код:

var data;
d3.json ( "file.json" , function(json) {
  data = json;
  console.log(data); //defined
});
console.log(data); //undefined

Но проблема в том, что у меня есть только переменная данных, определенная в функции d3.json, но это undefined. как я могу решить эту проблему?

Спасибо

Ответ 1

Поскольку запросы d3 (например, d3.json) являются асинхронными, рекомендуется обернуть весь код, зависящий от вашего внешнего запроса, в обратный вызов запроса, гарантируя, что этот код имеет доступ к данным перед выполнением. Из документов D3: "При асинхронной загрузке данных код, который зависит от загруженных данных, обычно должен существовать в функции обратного вызова".

Таким образом, один вариант - поместить весь ваш код в функцию обратного вызова. Если вы хотите разделить код на части, вы также можете передать ответ на ваш запрос в отдельную функцию, например, так:

function myFunc(data) {
    console.log(data);
}

d3.json('file.json', function (data) {
    var json = data;
    myFunc(json);
});