FileReader API: как читать файлы синхронно - PullRequest
5 голосов
/ 13 января 2012

Я пытаюсь прочитать файл, выбранный с помощью файла типа ввода на html-странице.Я реализовал функцию для чтения файла, и содержимое файла может быть прочитано.Но реальная проблема заключается в том, что чтение содержимого файла выполняется асинхронно , что позволяет выполнять другие функции сценария.Я храню содержимое файла, прочитанного в массиве.

При переходе к другим функциям массив пуст.Когда вводится задержка, массив имеет содержимое.Кто-нибудь может мне помочь в решении этой проблемы без задержки?

Мой код для чтения файла:

var getBinaryDataReader = new FileReader();
getBinaryDataReader.onload = (function(theFile) {
return function(frEvnt)
{
  file[fileCnt]=frEvnt.target.result;
}
})(document.forms[formPos].elements[j].files[0]);

getBinaryDataReader.readAsBinaryString(document.forms[formPos].elements[j].files[0]);

Заранее спасибо.

1 Ответ

5 голосов
/ 13 января 2012

Я думаю, что вы должны делать то же, что и всегда, с помощью асинхронного вызова (например, Ajax): переместите код, который необходимо выполнить позже, в обратный вызов, который выполняется после чтения файла.

getBinaryDataReader.onload = function(theFile) {
   // theFile.target.result has your binary
   // you can move it into the array
   // (I think you are already doing this properly)
   // but then ...
   nowCallTheOtherCodeThatNeedsToRunLater();

   // or if you want to wait until all elements
   // in the array are downloaded now
   if (myArrayIsFullNow()){
      callTheCodeThatNeedsTheFullArray();
   }
   // else: do nothing, the final file to finish downloading
   // will trigger the code

} 
...