读取文件时设置超时
setTimeout while reading file
使用下面的代码,我正在读取 .csv 文件:
var fileInput = document.getElementById("uploaded-file");
var reader = new FileReader();
reader.onload = function () {
var students_data = reader.result.split(/\r?\n|\r/);
for(var count = 1; count<students_data.length; count++){
var str_students_information = students_data[count];
var arr_students_information = str_students_information.split(',');
var a_student_info = [
{name: 'student', value: 'add-student'},
{name:"id",value:arr_students_information[0]},
{name:"name",value:arr_students_information[1]},
{name:"mname",value:arr_students_information[2]},
{name:"sname",value:arr_students_information[3]}
];
sendToDatabase(a_student_info);
}
};
reader.readAsBinaryString(fileInput.files[0]);
我要实现的目标是在读取文件时每 2 秒调用方法 sendToDatabase()
。换句话说,在读取一行文档后调用该方法并等待 2 秒再读取下一行。
在主题 setTimeout in for-loop does not print consecutive values 的帮助下,我正在玩 setTimeout()
,但总是没有我需要的东西......可能我遗漏了一些东西......
我相信这可行:
for(....) {
.
.
.
(function(student_info) {
sendToDatabase(student_info);
})(a_student_info);
}
既然你想定期做某事,你应该使用setInterval()
。不是循环,而是在回调函数中递增数组索引。
var fileInput = document.getElementById("uploaded-file");
var reader = new FileReader();
reader.onload = function() {
var students_data = reader.result.split(/\r?\n|\r/);
var count = 1;
var interval = setInterval(function() {
if (count >= students_data.length) {
clearInterval(interval);
return;
}
var str_students_information = students_data[count];
var arr_students_information = str_students_information.split(',');
var a_student_info = [{
{name: 'student', value: 'add-student'},
{name:"id",value:arr_students_information[0]},
{name:"name",value:arr_students_information[1]},
{name:"mname",value:arr_students_information[2]},
{name:"sname",value:arr_students_information[3]}
];
sendToDatabase(a_student_info);
count++;
}, 2000);
};
reader.readAsBinaryString(fileInput.files[0]);
使用下面的代码,我正在读取 .csv 文件:
var fileInput = document.getElementById("uploaded-file");
var reader = new FileReader();
reader.onload = function () {
var students_data = reader.result.split(/\r?\n|\r/);
for(var count = 1; count<students_data.length; count++){
var str_students_information = students_data[count];
var arr_students_information = str_students_information.split(',');
var a_student_info = [
{name: 'student', value: 'add-student'},
{name:"id",value:arr_students_information[0]},
{name:"name",value:arr_students_information[1]},
{name:"mname",value:arr_students_information[2]},
{name:"sname",value:arr_students_information[3]}
];
sendToDatabase(a_student_info);
}
};
reader.readAsBinaryString(fileInput.files[0]);
我要实现的目标是在读取文件时每 2 秒调用方法 sendToDatabase()
。换句话说,在读取一行文档后调用该方法并等待 2 秒再读取下一行。
在主题 setTimeout in for-loop does not print consecutive values 的帮助下,我正在玩 setTimeout()
,但总是没有我需要的东西......可能我遗漏了一些东西......
我相信这可行:
for(....) {
.
.
.
(function(student_info) {
sendToDatabase(student_info);
})(a_student_info);
}
既然你想定期做某事,你应该使用setInterval()
。不是循环,而是在回调函数中递增数组索引。
var fileInput = document.getElementById("uploaded-file");
var reader = new FileReader();
reader.onload = function() {
var students_data = reader.result.split(/\r?\n|\r/);
var count = 1;
var interval = setInterval(function() {
if (count >= students_data.length) {
clearInterval(interval);
return;
}
var str_students_information = students_data[count];
var arr_students_information = str_students_information.split(',');
var a_student_info = [{
{name: 'student', value: 'add-student'},
{name:"id",value:arr_students_information[0]},
{name:"name",value:arr_students_information[1]},
{name:"mname",value:arr_students_information[2]},
{name:"sname",value:arr_students_information[3]}
];
sendToDatabase(a_student_info);
count++;
}, 2000);
};
reader.readAsBinaryString(fileInput.files[0]);