setTimeout при чтении файла - PullRequest
0 голосов
/ 31 октября 2018

С кодом ниже я читаю файл .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]);

Моя цель - вызывать метод sendToDatabase() каждые 2 секунды при чтении файла. Иными словами, после прочтения строки документа вызовите метод и подождите 2 секунды, прежде чем читать следующую строку.
С помощью темы setTimeout в цикле for не печатает последовательные значения Я играл с setTimeout(), но всегда не то, что мне нужно ... Возможно, я что-то упустил ...

Ответы [ 2 ]

0 голосов
/ 31 октября 2018

Поскольку вы хотите что-то делать периодически, вы должны использовать 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]);
0 голосов
/ 31 октября 2018

Я верю, что это может работать:

for(....) {
 .
 .
 .
  (function(student_info) {
      sendToDatabase(student_info); 
  })(a_student_info);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...