Javascript console.log 中的数组长度不同?
Array different length in console.log at Javascript?
嘿嘿,我第一次在 js 中找到这个
我正在尝试将文件中的所有数据放入一个数组中。而且我查的时候有一个奇怪的地方,就是数组长度奇数。
这是我的代码
export function convertGISToGeojson(file) {
if (file) {
let geojson = [];
var promise = new Promise(getBuffer(file));
promise
.then(function (data) {
geojson = data;
console.log(geojson);
})
.catch(function (err) {
console.log("Error: ", err);
});
return geojson;
} else {
return null;
}
}
function getBuffer(fileData) {
return function (resolve) {
var reader = new FileReader();
var shapefile = require("shapefile");
reader.readAsArrayBuffer(fileData);
reader.onload = function () {
let geojson = [];
let result = reader.result;
shapefile
.open(result)
.then((source) =>
source.read().then(function log(result) {
if (result.done) return;
geojson.push(result.value);
return source.read().then(log);
})
)
.catch((error) => console.error(error.stack));
resolve(geojson);
};
};
}
当我尝试 console.log(data)
那个变量时,结果是这样的
但是,当我尝试 console.log(data[0])
时,结果是未定义的
我的代码有什么问题?
在里面试试console.log(data[0])
promise
.then(function (data) {
geojson = data;
console.log(data[0])
console.log(geojson);
})
您的 convertGISToGeojson
和 getBuffer
函数没有按照您的预期执行,您返回的是一个空数组或 null,您没有等待 promise 解决或也解决早期,使用 async/await
。我在下面的演示中包含了这两个函数:
function convertGISToGeojson(fileArrayBuffer) {
return new Promise((resolve, reject) => {
var reader = new FileReader();
//var shapefile = require("shapefile"); // uncomment this
reader.readAsArrayBuffer(new Blob([fileArrayBuffer], {
type: "application/octet-stream"
}))
reader.onload = function(evt) {
let result = reader.result;
shapefile
.open(result)
.then((source) =>
source.read().then(function log(result) {
return source.read().then(i => resolve(i.value));
})
)
.catch((error) => reject(error.stack));
};
reader.onerror = (event) => reject(reader.error);
})
}
(async() => {
let file = 'https://cdn.rawgit.com/mbostock/shapefile/master/test/points.shp';
let fileBuffer = await fetch(file).then(res => res.arrayBuffer());
convertGISToGeojson(fileBuffer)
.then(info => console.log('info', info))
.catch(err => console.log('err', err))
})()
<script src="https://unpkg.com/shapefile@0.6.6/dist/shapefile.js"></script>
嘿嘿,我第一次在 js 中找到这个 我正在尝试将文件中的所有数据放入一个数组中。而且我查的时候有一个奇怪的地方,就是数组长度奇数。
这是我的代码
export function convertGISToGeojson(file) {
if (file) {
let geojson = [];
var promise = new Promise(getBuffer(file));
promise
.then(function (data) {
geojson = data;
console.log(geojson);
})
.catch(function (err) {
console.log("Error: ", err);
});
return geojson;
} else {
return null;
}
}
function getBuffer(fileData) {
return function (resolve) {
var reader = new FileReader();
var shapefile = require("shapefile");
reader.readAsArrayBuffer(fileData);
reader.onload = function () {
let geojson = [];
let result = reader.result;
shapefile
.open(result)
.then((source) =>
source.read().then(function log(result) {
if (result.done) return;
geojson.push(result.value);
return source.read().then(log);
})
)
.catch((error) => console.error(error.stack));
resolve(geojson);
};
};
}
当我尝试 console.log(data)
那个变量时,结果是这样的
console.log(data[0])
时,结果是未定义的
我的代码有什么问题?
在里面试试console.log(data[0])
promise
.then(function (data) {
geojson = data;
console.log(data[0])
console.log(geojson);
})
您的 convertGISToGeojson
和 getBuffer
函数没有按照您的预期执行,您返回的是一个空数组或 null,您没有等待 promise 解决或也解决早期,使用 async/await
。我在下面的演示中包含了这两个函数:
function convertGISToGeojson(fileArrayBuffer) {
return new Promise((resolve, reject) => {
var reader = new FileReader();
//var shapefile = require("shapefile"); // uncomment this
reader.readAsArrayBuffer(new Blob([fileArrayBuffer], {
type: "application/octet-stream"
}))
reader.onload = function(evt) {
let result = reader.result;
shapefile
.open(result)
.then((source) =>
source.read().then(function log(result) {
return source.read().then(i => resolve(i.value));
})
)
.catch((error) => reject(error.stack));
};
reader.onerror = (event) => reject(reader.error);
})
}
(async() => {
let file = 'https://cdn.rawgit.com/mbostock/shapefile/master/test/points.shp';
let fileBuffer = await fetch(file).then(res => res.arrayBuffer());
convertGISToGeojson(fileBuffer)
.then(info => console.log('info', info))
.catch(err => console.log('err', err))
})()
<script src="https://unpkg.com/shapefile@0.6.6/dist/shapefile.js"></script>