问题描述:
近期的可视化作品,老师要求读取利用爬虫爬取而来的大众点评餐饮数据json文件,当我使用d3.json读取文件,在本函数的第二个参数是个匿名函数function(){};当在此匿名函数里面将读出的数据加入数组,发现在该匿名函数里面可逐个打印元素,出了函数就不能逐个打印,不能按照下标索引打印某一个,但console,log(myarray);就能显示全部。
原因:
经过检查发现,代码执行读取文件数据时候相当于是并发的,也就是说,文件都还没读完,你函数外面下面的console语句就已经执行了!
原码:
var names=new Array();
function INIT_data() {
d3.json("json/item.json", function(error, json) {
if(error)
alert("获取餐饮数据失败!");
for(var i = 0; i < json.RECORDS.length; i++) {
names.push(json.RECORDS[i].name);
strs = json.RECORDS[i].item_info.split(" | "); //字符分割
sorts.push(strs[0]);
addrs.push(strs[1]);
}
});
}
INIT_data();
console.log(Array[0]);
报错:undefined!
解决方案:
var names=new Array();
function INIT_data() {
d3.json("json/item.json", function(error, json) {
if(error)
alert("获取餐饮数据失败!");
for(var i = 0; i < json.RECORDS.length; i++) {
names.push(json.RECORDS[i].name);
strs = json.RECORDS[i].item_info.split(" | "); //字符分割
sorts.push(strs[0]);
addrs.push(strs[1]);
}
print(names);
});
}
function print(arr){
for(var i=0;i<arr.length;i++){
console.log(arr[i]);
}
}
INIT_data();
蓝色字体部分则为解决方案!
ok,that all,more about please QQ:1559674040