javascript - 读取文件时设置超时

标签 javascript settimeout filereader

使用下面的代码,我正在读取 .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(),但总是没有我需要的东西......可能我遗漏了一些东西......

最佳答案

既然你想定期做某事,你应该使用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]);

关于javascript - 读取文件时设置超时,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53090629/

相关文章:

javascript - 如何使用 Interval-Promise Node.js 模块链接 Promise?

php - facebook graph api 确定用户是否喜欢 url

javascript - 带有阻塞代码的 setTimeout 行为

javascript - 如何使用 setTimeout() 调用 jQuery(document).ready 之外的函数?

javascript - 通过 Angular 指令上传图像并在 DOM 上显示

python从文本文件中逐行读取

javascript - knockout JS : Filtering a list unable to bind

javascript - 如何更改元素的 CSS 类并在单击时删除所有其他类

javascript - React Native 中 setTimeout 的准确性

javascript - 在 Firefox 中访问 FileReader 的部分结果