Javascript中window.requestFileSystem的数组范围

时间:2014-04-26 17:50:37

标签: javascript cordova

以下代码给出了一个相互矛盾的答案。 数组是全局但功能范围没有?我不明白。 这是代码

  var pictures = new Array();

  var app = {
  initialize: function() {
    this.bindEvents();
  },
  bindEvents: function() {
    document.addEventListener('deviceready', this.onDeviceReady, false);       
  },
  onDeviceReady: function() {

    window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, 
        function(fileSystem) {
            fileSystem.root.getDirectory("DCIM/Camera/", {create: false},
                function(dataDir) {
                   var directoryReader = dataDir.createReader();
                   directoryReader.readEntries(
                       function(entries){
                           var i;                           
                           for (i=0; i<entries.length; i++) {
                               pictures[i] = entries[i].fullPath;                                   
                            }
                            console.log(pictures.length + ' ---- in');
                        }, fail)
                }, fail);
        }, fail);  

    console.log(pictures.length + ' ---- out');

... 当图片进入函数时,webconsole值= 176

当图片输出该功能时,webconsole值= 0

为什么?

提前致谢

1 个答案:

答案 0 :(得分:0)

这里的问题是FileSystem API调用是异步的。

例如,如果您运行代码:

var i = 0;
setTimeout(function() {
  i = 10;
  console.log('i in: ' + i);
}, 100);

console.log('i out: ' + i);

你会看到我的行为与你所看到的相似,因为setTimeout发生在&#34; console.log之后(&#39; i out:&#39; + i) ;&#34 ;.同样的概念适用于您正在使用的FileSystem调用。