Передать строку из reader.onload в родительский - PullRequest
0 голосов
/ 07 ноября 2019

Это мой код. Я пытаюсь передать treeContent из функции read.onload. Я не могу заставить его работать.

консоль показывает: external undefined index.html: 18 inner hello world;index.html: 15

<!DOCTYPE html>
<html>
<head>
    <title>File reader</title>
    <meta charset="UTF-8" />
</head>

<body>
    <script>
        function read(e) {
            let reader = new FileReader();
            reader.onload = function (e) {
                const treeContent = reader.result;
                window.file = treeContent; 
                console.log('inner ' + window.file);              
            };
            reader.readAsText(e.target.files[0]);
            console.log('outer '+ window.file);
        }
    </script>
    <input type="file" onchange="read(event)" />
</body>
</html>

1 Ответ

1 голос
/ 07 ноября 2019

из того, что вы опубликовали, кажется, вы никогда не читали ни одного файла. где-то в вашем коде вы должны вызвать reader.readText (fileToRead) ..

взгляните на этот минимальный рабочий пример:

<!DOCTYPE html>
<html>
<head>
    <title>File reader</title>
    <meta charset="UTF-8" />
</head>

<body>
    <script>
        function read(e) {
            let reader = new FileReader();

            reader.onload = function (e) {
                const treeContent = reader.result;
                console.log(treeContent);
            };
            reader.readAsText(e.target.files[0]);
        }
    </script>
    <input type="file" onchange="read(event)" />
</body>
</html>

EDIT

Если вам нужен доступ к treeContent в другой функции, вам следует вызвать функцию внутри функции onload:

   function read(e) {
      let reader = new FileReader();

      reader.onload = function (e) {
         const treeContent = reader.result;
         treeContentProcessor(treeContent);
      };
      reader.readAsText(e.target.files[0]);
   }

   function treeContentProcessor (content) {
      //here is where treeContent is required
      console.log(content);
   }
...