Я не могу получить несколько файлов для загрузки данных и назначения на глобальные переменные. Я читал similar questions и related examples, но у меня все еще есть проблемы.Использование queue() для загрузки нескольких файлов и назначения глобальных переменных
var origins = [],
geoJSON = {
"type": "FeatureCollection",
"features": []
};
queue(1)
.defer(d3.csv, "path_to.csv", function(d) {
origins.push(d.o_geoid)
})
.defer(d3.json, "path_to.json", function(d) {
// Limit GeoJSON features to those in CSV
for (var i = d.features.length - 1; i >= 0; i--) {
if($.inArray(d.features[i].properties['GEOID10'], origins) != -1) {
geoJSON.features.push(d.features[i]);
}
}
})
.await(ready);
function ready() {
console.log(geoJSON);
}
Я рад фильтровать функции GeoJSON в ready()
, если это работает лучше, но мне нужно, чтобы это произошло, прежде чем начать создавать карту с
d3.g.selectAll("path")
.data(geoJSON.features)
.enter.append("path")
...
Я предполагаю, что это имеет отношение к делать с обратными вызовами и пустыми результатами, но я не могу заставить его работать. Я понял, что с помощью .await(console.log(geoJSON));
выводит правильный объект на консоль. Функция ready()
не будет выполнена. Спасибо за любую помощь в понимании и устранении этой проблемы.
Вы не можете назначать значения из асинхронных обратных вызовов в глобальные. Вся ваша обработка должна выполняться в функции '.ready()'. –
Во-первых, если вы используете 'queue (1)', вы запускаете '.defers' последовательно. Вы должны сделать это, потому что вы используете переменную 'origins' во втором' .defer'. На этом этапе использование '.queue' становится бессмысленным. Во-вторых, ваша готовая функция должна принимать аргументы 'ready (error, result1, result2)' где resultN является возвратом вашего '.defer'. Забудьте глобальные переменные ... – Mark
@Mark Спасибо. Я думал, что использование «очереди» было необходимо, чтобы убедиться, что все данные загружены, прежде чем пытаться использовать d3 для данных.Как я могу убедиться, что данные geojson были отфильтрованы до того, как я создаю многоугольники? Мне нужно только ~ 40 из них из ~ 770, но эти 40 иногда меняются на основе ввода csv. – josiekre