我正在调试一个用Javascript编写的复杂程序。我需要观察一个大矩阵的变化。使用Chrome Inspect Element查看矩阵中的每个元素并不方便。所以,我想把数据写到一个文本文件中。我找到了FileSystem的API和终端。
我已经将FileSystem应用程序接口集成到我的项目中,参考FileSystem终端项目。我定义了一个全局变量来存储fs.root。我想要的是在调试时将这个变量传递给我的程序,这样我就可以使用这个fs.root将数据转储到文本文件中。我请求文件系统:
window.requestFileSystem(window.TEMPORARY, 5*1024*1024, onInitFs, errorHandler); // 5MB但是"onInitFs“函数看起来像是一个消息响应函数,它被调用得很晚。即使在"onLoad='MyFun();'“之后。因此,我不知道将我自己的函数放在哪里,以确保定义了变量"fs.root“。现在,我已经把"MyFun()“放到了任何地方,都会生成一个"fs.root”没有定义的错误,因为"onInitFs“函数没有被调用。我已经测试了调用序列:
<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>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()”之后被调用?
发布于 2011-09-22 13:50:11
无论是Andrey的评论,还是下面的评论,都应该有效:
window.requestFileSystem(window.TEMPORARY, 5*1024*1024, function(fs) {onInitFs(fs); MyFun(fs); } , errorHandler);据我所知,fs被故意设计成异步的。因此,您不能强制以任何顺序调用它。因此,您必须调整到异步心态,而不是同步心态。
如果希望在文件系统请求完成时调用MyFun,则将MyFun挂接到文件系统请求完成时运行(而不是挂接到另一个不相关的onBodyLoad事件):
https://stackoverflow.com/questions/7508770
复制相似问题