【发布时间】:2017-08-09 11:33:17
【问题描述】:
我有一个 D3 项目,它使用一个非常大的 CSV 文件来读取数据。它工作正常,但有时用户会因为以下问题之一无限期地看到旋转的加载图像。
我需要能够捕捉这些问题并向用户显示一些有意义的消息,而不是永无止境的等待消息:
- 当数据文件 (MyData.csv) 不存在时
- 当 MyData.csv 存在但为空时
- 当 MyData.csv 存在时,它不为空但格式不正确(更改第一行的列标题名称以进行测试)。
理想情况下,我希望能够区分它们。
function loadData() {
d3.csv('MyMap.csv', function(data) {
data.forEach(function(d) {
doSomething()
});
// load primary data set
d3.csv('MyData.csv', function (data) {
doSomethingWithData(data);
}); // main data set
});
};
更新了错误检查
var ErrorEnum = Object.freeze({NOTFOUND: 1, EMPTY: 2, INVALIDFORMAT: 3});
var mapFileName = 'MyMap_empty.csv';
var dataFileName = 'MyData_empty.csv';
function redirectOnFileError(fileName, url, errID) {
var errTitle = errID == ErrorEnum.NOTFOUND ? "File Not Found" : (errID == ErrorEnum.EMPTY ? "Empty File" : "Invalid File Format");
var errText = fileName + (errID == ErrorEnum.NOTFOUND ? " could not be found" : (errID == ErrorEnum.EMPTY ? " is empty" : " has invalid format"));
console.log(errText);
swal({
title: errTitle,
text: errText,
type: "error",
confirmButtonText: "OK"
},
function(isConfirm){
// somehow we never get here!
console.log("here ...");
if (isConfirm) {
window.location.href = url;
}
});
// hack ... callback function above is not executed, so using below jQuery to use "OK" button's class and 'click' it
$('.swal2-confirm').click(function(){
window.location.href = url;
});
}
function loadData() {
d3.csv(mapFileName, function (error, data) {
if (error && error.status === 404) {
redirectOnFileError(mapFileName, "fnf.html", ErrorEnum.NOTFOUND);
}
else if (data.length === 0) {
redirectOnFileError(mapFileName, "ef.html", ErrorEnum.EMPTY);
}
else {
data.forEach(function (d) {
// DoSomethingHere();
});
// load primary data set
d3.csv(dataFileName, function (error, data) {
if (error && error.status === 404) {
redirectOnFileError(dataFileName, "fnf.html", ErrorEnum.NOTFOUND);
}
else if (data.length === 0) {
redirectOnFileError(dataFileName, "ef.html", ErrorEnum.EMPTY); }
else {
// DomSomethingWithData();
}); // main data set
});
}
}
};
【问题讨论】:
标签: javascript d3.js crossfilter file-exists