首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用Javascript API调试FileSystem?执行顺序问题

如何使用Javascript API调试FileSystem?执行顺序问题
EN

Stack Overflow用户
提问于 2011-09-22 10:01:35
回答 1查看 830关注 0票数 2

我正在调试一个用Javascript编写的复杂程序。我需要观察一个大矩阵的变化。使用Chrome Inspect Element查看矩阵中的每个元素并不方便。所以,我想把数据写到一个文本文件中。我找到了FileSystem的API和终端。

我已经将FileSystem应用程序接口集成到我的项目中,参考FileSystem终端项目。我定义了一个全局变量来存储fs.root。我想要的是在调试时将这个变量传递给我的程序,这样我就可以使用这个fs.root将数据转储到文本文件中。我请求文件系统:

代码语言:javascript
复制
 window.requestFileSystem(window.TEMPORARY, 5*1024*1024, onInitFs, errorHandler); // 5MB

但是"onInitFs“函数看起来像是一个消息响应函数,它被调用得很晚。即使在"onLoad='MyFun();'“之后。因此,我不知道将我自己的函数放在哪里,以确保定义了变量"fs.root“。现在,我已经把"MyFun()“放到了任何地方,都会生成一个"fs.root”没有定义的错误,因为"onInitFs“函数没有被调用。我已经测试了调用序列:

代码语言:javascript
复制
<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>

代码语言:javascript
复制
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元素的控制台窗口中: 01Position 02Position 03Position 04 04Position

我可以启用比"MyFun()“更早调用的"onInitFun()”函数吗?或者我应该把"MyFun()“放在哪里,这样它就可以在"onInitFun()”之后调用。我不希望用户点击一个按钮,因为MyFun只是在加载时做预处理工作。我是否可以生成一条消息,这样"MyFun()“将在"onInitFs()”之后被调用?

EN

回答 1

Stack Overflow用户

发布于 2011-09-22 13:50:11

无论是Andrey的评论,还是下面的评论,都应该有效:

代码语言:javascript
复制
window.requestFileSystem(window.TEMPORARY, 5*1024*1024, function(fs) {onInitFs(fs); MyFun(fs); } , errorHandler);

据我所知,fs被故意设计成异步的。因此,您不能强制以任何顺序调用它。因此,您必须调整到异步心态,而不是同步心态。

如果希望在文件系统请求完成时调用MyFun,则将MyFun挂接到文件系统请求完成时运行(而不是挂接到另一个不相关的onBodyLoad事件):

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7508770

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档