Как использовать FileSystem API для отладки Javascript? Выпуск распоряжения

Я отлаживал сложную программу, написанную на Javascript. Мне нужно следить за сменой большой матрицы. Не удобно видеть каждый элемент в матрице, используя Chrome Inspect Element. Итак, я хочу записать данные в текстовый файл. Я нашел FileSystem API и терминал.

Я включил FileSystem API в мой проект, со ссылкой на терминальный проект FileSystem. И я определяю глобальную переменную для хранения fs.root. Я хочу передать эту переменную в мою программу при отладке, чтобы я мог вывести данные в текстовый файл, используя этот файл fs.root. Я запрашиваю файловую систему:

 window.requestFileSystem(window.TEMPORARY, 5*1024*1024, onInitFs, errorHandler); // 5MB

Но функция onInitFs выглядит как функция ответа на сообщение, которая вызывается очень поздно. Даже после "onLoad='MyFun();'". Итак, я не знаю, куда поместить свою собственную функцию, чтобы убедиться, что переменная "fs.root" определена. Прямо сейчас я поставил "MyFun()" везде, все сгенерирует ошибку, что "fs.root" не определен, так как функция "onInitFs" не вызывается. Я проверил последовательность вызова:

------------- main.html

<html>
      <header>
            <script type='text/javascript' src='MyFun.js'></script>
            <script type='text/javascript' >
                   console.log('01Position');

                   function onInitFs(fs)
                   {
                        aGlobalFsRoot = fs.root;
                        console.log('04Position');
                   }
          window.requestFileSystem(window.TEMPORARY, 5*1024*1024, onInitFs, errorHandler);
            </script>
      </header>
      <body onLoad="MyFun();">
            <script>
                   console.log('02Position');
            </script>
      </body>
</html>

------------- MyFun.js

var aGlobalFsRoot;
function MyFun()
{
    console.log('03Position');
    // want to use "aGlobalFsRoot" to dump some matrix data, but it is not defined, which means "onInitFs()" is still not called.
}

Итак, в окне консоли Chrome Inspect Element: 01Position 02Position 03Position 04Position

Могу ли я включить функцию onInitFun() с именем ealier чем MyFun (). Или Где я должен поставить "MyFun()", чтобы он мог быть вызван позже, чем "OnInitFun()". Я не хочу, чтобы пользователь нажимал одну кнопку, поскольку MyFun просто выполняет предварительную обработку при загрузке. Могу ли я сгенерировать одно сообщение, поэтому "MyFun()" будет вызываться позже, чем "onInitFs()"?

1 ответ

Либо комментарий Андрея, либо следующее должно сработать:

window.requestFileSystem(window.TEMPORARY, 5*1024*1024, function(fs) {onInitFs(fs); MyFun(fs); } , errorHandler);

Как я понимаю, fs api специально разработан, чтобы быть асинхронным. Таким образом, вы не можете заставить его вызываться в любом порядке. Таким образом, вам придется приспособиться к асинхронному мышлению, а не к синхронному мышлению.

Если ты хочешь MyFun вызываться, когда запрос файловой системы выполнен, затем перехватить MyFun запускаться после выполнения запроса файловой системы (а не к другому, не относящемуся к onBodyLoad событие):

Другие вопросы по тегам